从零到一教会你ollama大模型本地部署与应用,老师都说写得好!

【多模态沉浸式教学】小白、散养研究生看完直接给自己放暑假!!–人工智能/多模态_哔哩哔哩_bilibili

国内外gpt工具:

通义tongyi.ai_你的全能AI助手-通义千问

文心一言

智谱清言

零一万物-AI2.0大模型技术和应用的全球公司

天工AI助手 — 双千亿级大语言模型

Kimi.ai - 帮你看更大的世界

秘塔AI搜索

Chatgpt

国内大模型api开放平台

智谱AI开放平台

零一万物大模型开放平台

百度智能云千帆大模型平台

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

PS:常用命令参考

旧版API调用:
pip install openai==0.28 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install openai -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install openai-python -i https://pypi.tuna.tsinghua.edu.cn/simple

查看文档 https://github.com/openai/openai-python/discussions/742 
https://github.com/openai/openai-python

通义千问:
api_key :  xxx
pip install dashscope -i https://pypi.tuna.tsinghua.edu.cn/simple

阿里云RAM 访问控制:xxx
用户登录名称 xxx
AccessKey ID  :xxx
AccessKey Secret : xxx
登录密码: xxx

智谱清言chatgml : api_key: xxx


本地部署大语言模型
https://ollama.com/

默认模型路径: C:\Users\LingJiaXiaoHu\.ollama\models
修改环境变量 新建OLLAMA_MODELS   键值为新模型保存路径
ollama list 显示本地模型列表
运行
ollama run llama3        8b
ollama run qwen2        7b
ollama run gemma      7b
ollama run phi3           3.8b
视觉模型:   ollama run llava:7b 

ollama run llama3.1    8b

安装docker后
cmd  运行 docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
gpu支持: docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda

一、python简单调用LLM

阿里云通义千问api_key:https://dashscope.console.aliyun.com/apiKey

以阿里云通义千问大模型为例:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2024/6/25 21:09
# @Author  : LingJiaXiaoHu
# @File    : qwen.py
# @Software: win11 pytorch(GPU版本) python3.9.16
from openai import OpenAI
import os

'''
# 非流式调用示例
def get_response():
    client = OpenAI(
        #api_key=os.getenv("DASHSCOPE_API_KEY"), # 如果您没有配置环境变量,请在此处用您的API Key进行替换
        api_key="sk-xxx",
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # 填写DashScope SDK的base_url
    )
    completion = client.chat.completions.create(
        model="qwen-plus",
        messages=[{'role': 'system', 'content': 'You are a helpful assistant.'},
                  {'role': 'user', 'content': '你是谁?'}]
        )
    print(completion.model_dump_json()
'''

import json
# 流式调用示例
def get_response():
    while True:
        user_input = input("\n请输入你的问题(输入q结束提问): ").strip()   # 去除输入前后的空白字符
        # 检查用户是否想退出
        if user_input.lower() == 'q':
            print("感谢使用,再见!")
            break

        client = OpenAI(
            # 如果您没有配置环境变量,请在此处用您的API Key进行替换
            #api_key=os.getenv("DASHSCOPE_API_KEY"),
            api_key="sk-xxx",
            # 填写DashScope SDK的base_url
            base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
        )
        completion = client.chat.completions.create(
            model="qwen-plus",
            messages=[{
   'role': 'system', 'content': 'You are a helpful assistant.'},
                      {
   'role': 'user', 'content': user_input}],
            stream=True,
            # 通过以下设置,在流式输出的最后一行展示token使用信息
            stream_options={
   "include_usage": True}
        )

        for chunk in completion:
            json_text = chunk.model_dump_json()
            #print(json_text)

            # 假设 responses 是一个用于存储所有响应内容的列表
            responses = []
            # 解析 JSON 字符串为字典
            response_data = json.loads(json_text)
            # 提取响应内容
            if 'choices' in response_data and response_data['choices']:
                delta = response_data['choices'][0]['delta']
                if 'content' in delta and delta['content'].strip():
                    # 将 content 添加到 responses 列表中
                    responses.append(delta['content'])

            # 可以选择打印出当前响应内容         打印完整的文本
            print(delta['content'] if 'content' in delta else "无响应内容",end='')


if __name__ == '__main__':
    get_response()

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2024/7/1 20:40
# @Author  : LingJiaXiaoHu
# @File    : qwen_vl.py
# @Software: win11 pytorch(GPU版本) python3.9.16
from openai import OpenAI
import os

# VL模型流式调用示例
import json
def get_response():
    while True:
        user_img = input("\n请输入你图片地址(输入q结束提问): ").strip()   # 去除输入前后的空白字符
        # 检查用户是否想退出
        if user_img.lower() == 'q':
            print("感谢使用,再见!")
            break

        client = OpenAI(
            # 如果您没有配置环境变量,请在此处用您的API Key进行替换
       
<think>好的,我现在需要帮助用户了解或实现得物签名的相关技术,特别是签名算法的实现方式。首先,我需要收集已有的信息。根据用户提供的引用,特别是引用[4]和[5],得物的签名算法可能涉及逆向工程分析,使用了JavaScript中的XMLHttpRequest重来拦截请求,并在请求中包含特定的sign参数。这可能意味着签名生成是在客户端进行的,通常在前端JavaScript代码中完成。 接下来,我应该考虑常见的签名生成方法。常见的Web应用签名算法通常使用HMAC、AES、RSA或自定义的哈希组合。引用[1]提到了RSA算法,但得物的签名可能更倾向于使用HMAC-SHA256之类的哈希算法,结合时间戳、随机数和请求参数进行签名,以防止篡改和重放攻击。 用户可能需要具体的步骤,比如逆向分析得物的JavaScript代码,找到生成sign的函数,提取关键参数和加密逻辑。引用[5]中的代码片段展示了如何重XMLHttpRequest的open方法来拦截请求,这可能用于调试和定位签名生成的代码位置。 此外,引用[4]提到使用Python进行算法还原,所以可能需要在Python中复现JavaScript的签名生成逻辑。这通常涉及分析请求参数如何排序、拼接,以及如何密钥结合进行哈希或加密。需要注意反爬机制,如obfuscation(代码混淆)或动态密钥,这可能需要使用AST(抽象语法树)解析或动态执行来还原算法。 用户可能还需要了解如何应对反调试措施,比如在Chrome开发者工具中使用断点调试,或者使用工具如Frida进行Hook。同时,引用[3]和[4]强调了法律和合规问题,确保研究仅用于学习目的,不用于非法用途。 最后,应该提醒用户注意法律风险,遵循网站的使用条款,避免侵犯知识产权或违反计算机安全法律。总结起来,实现得物签名需要逆向工程分析前端代码,提取关键算法,处理可能的混淆和反调试,最后用目标语言如Python复现算法。</think>### 得物签名算法实现方式分析 得物签名算法主要用于接口请求的身份验证和防篡改保护,常见实现方式涉及以下技术点: #### 1. **签名参数组成** 签名通常由以下参数动态生成: - 请求参数(经排序、过滤空值后拼接) - 时间戳(如:$timestamp=1620000000$) - 随机数(如:$nonce=5a8s3d$) - 设备指纹(如:$device\_id=abcdef$) - 应用密钥(加密盐值,可能动态获取)[^4] 示例参数拼接逻辑: $$ \text{sign\_str} = \text{path} + \text{sorted\_params} + \text{timestamp} + \text{nonce} $$ #### 2. **加密算法类型** 根据逆向分析,得物可能采用以下组合: - **HMAC-SHA256**:对拼接字符串进行哈希运算 - **AES/Base64编码**:对结果二次处理 - **自定义位移/异或操作**:增加逆向难度[^5] #### 3. **JavaScript代码混淆** 关键函数可能被混淆,例如: ```javascript function _0x12ab5(a, b) { return a ^ b << 3; } // 需要AST解析还原控制流 ``` #### 4. **Python算法还原示例** ```python import hmac import hashlib def generate_sign(params, secret_key): # 1. 参数排序并拼接 sorted_str = '&'.join([f"{k}={v}" for k,v in sorted(params.items())]) # 2. HMAC-SHA256加密 sign = hmac.new(secret_key.encode(), sorted_str.encode(), hashlib.sha256).hexdigest() # 3. 自定义处理(示例) return sign.upper() + str(int(time.time())) ``` #### 5. **反爬对抗措施** - 动态密钥:通过接口定期更新加密盐值 - 环境检测:验证是否在真机环境运行 - 请求频率限制:异常高频触发验证码[^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值