From 258c16ebcafe9c486e5d62ca976fc35e375910b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A1=A3=E6=B2=BE=E4=B8=8D=E8=B6=B3=E6=83=9C?= Date: Fri, 15 Nov 2024 18:46:01 +0800 Subject: [PATCH] =?UTF-8?q?fix(serverless-api):=20=E5=AF=B9=E8=AF=9D?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E7=A4=BA=E4=BE=8B,=20=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E7=BA=BF=E4=B8=8A=E5=B7=B2=E6=94=AF=E6=8C=81=E7=9A=84=20/v1=20?= =?UTF-8?q?=E8=B7=AF=E5=BE=84,=20=E8=B0=83=E6=95=B4=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 衣沾不足惜 --- docs/serverless-api/llm-chat.mdx | 55 +++++++++++++++++--------------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/docs/serverless-api/llm-chat.mdx b/docs/serverless-api/llm-chat.mdx index 799abd5..9952a7b 100644 --- a/docs/serverless-api/llm-chat.mdx +++ b/docs/serverless-api/llm-chat.mdx @@ -26,11 +26,11 @@ import TabItem from '@theme/TabItem'; ```bash - curl https://ai.gitee.com/api/serverless/Qwen2.5-72B-Instruct/chat/completions \ + curl https://ai.gitee.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer 你的 Gitee AI 访问令牌" \ -d '{ - "model": "Qwen/Qwen2.5-72B-Instruct", + "model": "Qwen2.5-72B-Instruct", "stream": false, "messages": [ { @@ -49,7 +49,7 @@ import TabItem from '@theme/TabItem'; ```js async function query(data) { const response = await fetch( - "https://ai.gitee.com/api/serverless/Qwen2.5-72B-Instruct/chat/completions", + "https://ai.gitee.com/v1/chat/completions", { headers: { "Authorization": "Bearer xxxxx", @@ -74,6 +74,7 @@ query({ "content": "老鼠生病了可以吃老鼠药治好吗?" } ], + "model": "Qwen2.5-72B-Instruct", "stream": false, "max_tokens": 512, "temperature": 0.7, @@ -92,7 +93,7 @@ AI 模型响应: "id": "chat-476266af435142d2bb7d342ea54694f2", "object": "chat.completion", "created": 1731401912, - "model": "Qwen/Qwen2.5-72B-Instruct", + "model": "Qwen2.5-72B-Instruct", "choices": [{ "index": 0, "message": { @@ -115,7 +116,7 @@ AI 模型响应: ## 使用 openai 客户端调用 Gitee AI 模型 API -Gitee AI 的 Serverless API 兼容开发者喜爱且社区流行的 OpenAI 风格 API 设计。 +Gitee AI 的 Serverless API 兼容开发者喜爱且社区流行的 OpenAI 风格 API。 所有支持 OpenAI API 的工具都可以直接使用 Gitee AI 的 Serverless API 工作。 @@ -133,15 +134,15 @@ app.py 文件如下: from openai import OpenAI import json -base_url = "https://ai.gitee.com/api/serverless/Qwen2.5-72B-Instruct" +base_url = "https://ai.gitee.com/v1" -model_name = "Qwen/Qwen2.5-72B-Instruct" +model_name = "Qwen2.5-72B-Instruct" # https://ai.gitee.com/dashboard/settings/tokens 获取你的 api_key -client = OpenAI(base_url=base_url, api_key="Gitee_AI_API_KEY") +client = OpenAI(base_url=base_url, api_key="GITEE_AI_API_KEY") completion = client.chat.completions.create( - model=model_name, # 指定模型名称 例如 Qwen/Qwen2.5-72B-Instruct,可访问 https://ai.gitee.com/serverless-api 查看 + model=model_name, # 指定模型名称 例如 Qwen2.5-72B-Instruct,可访问 https://ai.gitee.com/serverless-api 查看 stream=True, temperature=0.7, top_p=0.95, @@ -158,14 +159,14 @@ for chunk in completion: ``` ## 请求体常见参数说明 -- model:指定要使用的模型名称,比如 "Qwen/Qwen2.5-72B-Instruct" 或 "01-ai/Yi-1.5-34B-Chat". +- model:指定要使用的模型名称,比如 "Qwen2.5-72B-Instruct" 或 "Yi-1.5-34B-Chat". - messages:消息列表,用于设置对话的上下文,每条消息包含 role 和 content。通过控制此列表,可实现多轮对话。这里的 messages 就是常说的 “prompt” 。 - role:表示消息的角色类型,可以是以下三种: - - "system":系统角色,通常用于设定 AI 的行为和性格,比如 "你是一个专家"。 - - "user":用户角色,表示用户的问题或指令。 - - "assistant":助手角色,表示 AI 的回答,可以用来模拟多轮对话。 - - "content":消息的具体文本内容。 + - system:系统角色,通常用于设定 AI 的行为和性格,比如 "你是一个专家"。 + - user:用户角色,表示用户的问题或指令。 + - assistant:助手角色,表示 AI 的回答,可以用来模拟多轮对话。 + - content:消息的具体文本内容。 - temperature:用于控制生成内容的随机性,取值范围为 0-1。值越低,输出越稳定;值越高,输出越有创造性。 - top_p:值在 0-1 之间,控制生成内容的保守性或多样性。 - max_tokens:限制生成文本的长度,防止过长的回复。 @@ -315,7 +316,7 @@ eval(f'{function_res.name}(**{arguments_res})') 至此函数已成功调用!你可以将函数响应的结果处理为: ```{'role': 'tool', 'name': 'get_current_weather', 'content': '抓取的数据: 北京当前温度:12°C天气状况:雾霾...', tool_call_id:'xxxx'}``` 添加到 messages 消息列表末尾,再次请求 Gitee AI Serverless API,让 AI 整理答案。 -上述方法为原始方法,用于理解 function call 流程和原理。接下来将使用更简便的方法实现。 +上述方法为原始方法,用于理解 function call 流程和原理,接下来将使用更简便的方法实现。 ## 实战,让 AI 汇报今日新闻、执行 python 代码! langchain 等库提供了更多简便的工具和写法,首先安装必要的库: @@ -330,6 +331,8 @@ pip install langchain==0.3.3 langgraph==0.2.38 langchain_core langchain_communit 使用 langchain `@tool` 装饰器,会自动帮你转换为符合规范的 tools 参数,包括首行的 """xxx""" 注释和 Annotated 注释都会成为 tools 参数中的 "description"。 使用 langgraph `create_react_agent` 创建 agent, 将会自动生成函数调用、执行工具、回传工具消息等,极大简化流程。 + +下面实现让 AI “获取新闻,编写并执行 Python 代码,将新闻写入到 ./news.txt 文件中”: ```python from langchain_openai import ChatOpenAI from langchain.tools import tool @@ -370,13 +373,13 @@ def python_code_exec(code: Annotated[str, '安全的 python 代码、表达式 tools_list = [get_news, python_code_exec] -model_name = "Qwen/Qwen2.5-72B-Instruct" -base_url = "https://ai.gitee.com/api/serverless/Qwen2.5-72B-Instruct" +model_name = "Qwen2.5-72B-Instruct" +base_url = "https://ai.gitee.com/v1" # https://ai.gitee.com/dashboard/settings/tokens 获取你的访问令牌 -Gitee_AI_API_KEY = "" +GITEE_AI_API_KEY = "" -llm = ChatOpenAI(model=model_name, api_key=Gitee_AI_API_KEY, base_url=base_url, streaming=True, temperature=0.1, presence_penalty=1.05, top_p=0.9, +llm = ChatOpenAI(model=model_name, api_key=GITEE_AI_API_KEY, base_url=base_url, streaming=True, temperature=0.1, presence_penalty=1.05, top_p=0.9, extra_body={ "tool_choice": "auto", }) @@ -391,7 +394,7 @@ first = True config = {"configurable": {"thread_id": "xxx", "recursion_limit": 10}} for ai_msg, metadata in agent_executor.stream( - {"messages": [system_message, HumanMessage(content="汇报今日新闻")]}, config, stream_mode="messages" + {"messages": [system_message, HumanMessage(content="获取今日前三条新闻标题,然后编写 python 代码写入到 ./news.txt 中, 编码使用 utf-8")]}, config, stream_mode="messages" ): if ai_msg.content and isinstance(ai_msg, AIMessage): # 实时输出 @@ -412,10 +415,10 @@ for ai_msg, metadata in agent_executor.stream( # 汇总输出 print(ai_res_msg) ``` -你将会看到模型实时调用的过程和最新新闻结果! +你将会看到模型实时调用的过程和最新新闻结果,然后 AI 将自行编写代码,将新闻标题保存到 news.txt 文件中! ## 让模型响应 JSON 格式数据 -通过 prompt 使模型响应 JSON,不稳定?现在你可以通过 guided_json 让模型以自定义的 [JSON Schema](https://json-schema.org/learn/miscellaneous-examples) 结构响应: +通过 prompt 使模型响应 JSON 不稳定?现在你可以通过 guided_json 让模型以自定义的 [JSON Schema](https://json-schema.org/learn/miscellaneous-examples) 结构响应: ```json "guided_json": """{ @@ -441,11 +444,11 @@ print(ai_res_msg) ```python from langchain_openai import ChatOpenAI -model_name = "Qwen/Qwen2.5-72B-Instruct" -base_url = "https://ai.gitee.com/api/serverless/Qwen2.5-72B-Instruct" +model_name = "Qwen2.5-72B-Instruct" +base_url = "https://ai.gitee.com/v1" # https://ai.gitee.com/dashboard/settings/tokens 获取你的访问令牌 -Gitee_AI_API_KEY = "" -llm = ChatOpenAI(model=model_name, api_key=Gitee_AI_API_KEY, base_url=base_url, streaming=True, temperature=0.1, presence_penalty=1.05, top_p=0.9, +GITEE_AI_API_KEY = "" +llm = ChatOpenAI(model=model_name, api_key=GITEE_AI_API_KEY, base_url=base_url, streaming=True, temperature=0.1, presence_penalty=1.05, top_p=0.9, extra_body={ "guided_json": """{ "type": "object", -- Gitee