TaskingAI 模型推理实战:使用 Python SDK 完成 Chat Completion 单轮与多轮对话
人工智能大模型AI AgentRAG后端前端【免费下载链接】TaskingAIThe open source platform for AI-native application development.项目地址https://gitcode.com/gh_mirrors/ta/TaskingAI点击查看免费下载本文基于 TaskingAI 开源仓库中的模型推理代码模板文档系统讲解如何通过官方 Python SDKtaskingai调用chat_completion完成单轮与多轮对话并结合仓库源码深入剖析消息结构、模型配置参数、流式输出与函数调用能力帮助开发者在 AI 原生应用开发中快速落地大模型对话能力。一、Chat Completion 是什么Chat Completion对话补全是大模型应用开发中最基础、最高频的推理能力。它接收一段以角色role为标识的对话消息列表让模型基于上下文继续生成内容。在 TaskingAI 中chat_completion是对模型执行推理的统一入口无论是文本对话、多轮追问、带上下文的助手问答还是携带工具function call的自动化任务最终都汇聚到这一核心接口。TaskingAI 的代码模板文档位于 backend/resources/code_templates/model/1_python/1_inference/1_chat_completion.md它给出了 Python SDK 最直接的两种用法单轮对话与多轮对话。本文将以该文档为主线把示例代码逐段拆解并补充仓库中对应的请求模型、消息类型、配置参数与底层调用链让你不仅会调还知道为什么这样调。二、前置准备安装 SDK 与确定模型 ID在使用taskingai之前需要完成两件事安装官方 Python SDK执行pip install taskingai准备可用的模型 ID在项目中创建一个 Chat Completion 类型的模型chat_completion获得形如$$MODEL_ID$$的模型标识。模板中的$$MODEL_ID$$是占位符实际使用时替换为你项目中的真实模型 ID。模板文档中所有 Python 示例均以taskingai包为入口import taskingai from taskingai.inference import chat_completion, SystemMessage, UserMessage其中chat_completion是同步调用函数SystemMessage与UserMessage是消息构造器。关于消息类型的定义与约束下文会结合源码详细说明。三、单轮对话最小可用示例单轮对话是最简单的调用形态一条系统指令SystemMessage加上一条用户提问UserMessage一次调用即可获得模型回复。import taskingai from taskingai.inference import chat_completion, SystemMessage, UserMessage # 从你的项目中选择一个可用的 chat_completion 模型 model_id $$MODEL_ID$$ # 创建一次 chat_completion 任务 chat_completion_result taskingai.inference.chat_completion( model_idmodel_id, messages[ SystemMessage(You are a health advisor providing nutritional advice. You should always reply with a professional, kind, and patient tone.), UserMessage(How much sugar can a woman take in a day?), ] )3.1 两条消息的职责划分SystemMessage设定模型的角色与行为边界。示例中要求模型扮演营养健康顾问语气专业、友善、耐心。系统消息通常放在消息列表第一位用于约束整段对话的风格与范围UserMessage用户的真实提问。模型将基于系统指令和用户问题生成回复。3.2 从源码看消息模型模板中使用的SystemMessage、UserMessage并非临时拼装的字典而是有严格的 Pydantic 模型约束。在推理服务端消息的底层定义位于 inference/app/models/chat_completion/chat_completion.pyclass ChatCompletionRole(str, Enum): system system assistant assistant user user function function消息基类ChatCompletionMessage允许content为普通字符串对于支持视觉vision的大模型content还可以是text与image_url组成的多模态内容列表见ChatCompletionMultimodalContent定义chat_completion.py。而在后端 API 层请求体ChatCompletionRequest对messages做了强校验——messages不能为空且每条消息的role必须是system/user/assistant/function之一否则直接抛出校验错误参考 backend/app/schemas/model/chat_completion.py。这意味着 SDK 端构造消息时会话角色是严格受控的不会出现非法角色混入的情况。四、多轮对话携带上下文继续追问真实业务场景中对话往往是多轮的用户会基于上一轮的答案继续追问。多轮对话的关键在于把历史消息完整回传给模型让模型记得之前的对话内容。from taskingai.inference import AssistantMessage # 多轮对话 chat_completion_result taskingai.inference.chat_completion( model_id$$MODEL_ID$$, messages[ SystemMessage(You are a health advisor providing nutritional advice. You should always reply with a professional, kind, and patient tone.), UserMessage(How much sugar can a woman take in a day?), AssistantMessage(The AHA suggests a added-sugar limit of no more than 100 calories per day (about 6 teaspoons or 24 grams) for woman.), # 示例中 UserMessage 和 AssistantMessage 通过构造函数手动创建 # 实际场景中这些消息应通过 taskingai.assistant.list_messages 获取 UserMessage(What about man?), ] )4.1 消息顺序即上下文多轮对话中消息必须按时间顺序排列system → user → assistant → user → ...。模型通过完整的消息序列感知上下文从而回答那男性呢这类依赖前文的追问。4.2 手动构造 vs 会话历史模板注释特别强调了两种消息来源的差异手动构造示例中的AssistantMessage(The AHA suggests ...)是开发者自行书写的上一轮回答。这种方式适用于演示、测试或需要精确控制上下文内容的场景真实场景在 TaskingAI 的 Assistant 体系中历史消息应当通过taskingai.assistant.list_messages从会话chat中读取以保证消息的真实性与完整性。4.3 AssistantMessage 的扩展字段从源码看ChatCompletionAssistantMessage除了content之外还带有一个可选字段function_calls类型为List[ChatCompletionFunctionCall]用于承载助手在函数调用场景下发起的工具调用请求参考 backend/app/models/inference/chat_completion.py。因此AssistantMessage既可以是纯文本回复也可以是请求调用某个函数的中间消息这一点在多轮工具编排中至关重要。五、掌握 configs模型生成参数详解模板的 REST API 示例中出现了configs参数configs: { temperature: 0.5 }configs是每次调用可选的模型配置字典。从推理服务的配置模型定义看TaskingAI 支持以下标准生成参数见 inference/app/models/chat_completion/model_config.py参数类型作用temperaturefloat采样温度控制输出随机性取值通常在 0~1 之间top_pfloat核采样阈值只从累积概率达到 top_p 的候选词中采样top_kint仅从前 k 个概率最高的候选词中采样max_tokensint生成的最大 token 数控制回答长度stopstr / List[str]停止词命中即终止生成presence_penaltyfloat存在惩罚鼓励谈论新话题frequency_penaltyfloat频率惩罚抑制重复用词seedint随机种子用于复现确定性输出response_formatstr输出格式约束如 JSON 模式关键机制configs并非随意填写。在推理服务端validate_chat_completion_model会根据模型 schema 中声明的config_schemas约束逐项校验 configs——不在白名单内的参数会被置空非 verify 模式或直接报错verify 模式不满足类型约束的值也会被拒绝参考 model_config.py。也就是说不同模型允许的 configs 集合由该模型自身的 schema 决定这也解释了为何不同厂商模型需要差异化配置。5.1 模型默认配置与请求配置的合并在后端路由层请求中的configs会与模型自身保存的默认configs合并模型默认配置为基底请求配置按 key 覆盖configs {**model_configs, **input_configs}见 backend/app/routes/inference/chat_completion.py。因此你可以在模型上预设常用参数单次调用时只传需要覆盖的项。六、理解响应结构一次非流式调用成功后返回的chat_completion_result对应ChatCompletion对象其核心字段定义于 inference/app/models/chat_completion/chat_completion.py字段类型说明objectstr固定为ChatCompletionfinish_reasonenum结束原因stop正常结束、length达到长度上限、function_calls请求调用函数、error、recitation、unknownmessageChatCompletionAssistantMessage模型生成的消息含content与可选的function_callscreated_timestampint响应创建时间戳毫秒usageChatCompletionUsage计费信息input_tokens与output_tokensfallback_indexOptional[int]命中的回退模型序号启用模型 fallback 时出现其中finish_reason是判断调用意图的关键若为function_calls说明模型没有直接回答而是请求调用某个函数这是工具调用流程的信号。七、从单轮到流式与函数调用能力延伸模板末尾提到关于 chat completion 的流式模式stream mode与函数调用function calls的更多信息请参考官方文档。这两项能力在仓库源码中有完整实现这里从代码层面给出关键支撑便于你按需扩展。7.1 流式输出Streaming / SSE非流式调用会阻塞直到完整结果生成流式模式则通过 Server-Sent EventsSSE逐块返回增量内容。请求体中的stream字段默认False控制该行为见 backend/app/schemas/model/chat_completion.py。在服务端流式结果由ChatCompletionChunk表示每个 chunk 包含index块序号、delta增量文本与created_timestamp见 inference/app/models/chat_completion/chat_completion.py。后端以text/event-stream媒体类型返回每个数据块以data: {json}\n\n格式输出并以SSE_DONE_MSG结束见 backend/app/routes/inference/chat_completion.py。从源码看流式能力并非所有模型都具备——模型 schema 中有streaming属性路由层在流式请求前会检查model.allow_streaming()不支持则返回校验错误backend/app/routes/inference/chat_completion.py。7.2 函数调用Function Call函数调用让模型在需要时请求调用工具而不是直接给出文本答案是实现 Agent 与工具编排的基石。请求侧通过两个参数控制functions函数定义列表JSON Schema 格式描述函数名、描述与参数结构function_call调用策略可选none不调用、auto模型自行决定或指定具体函数名强制调用见 backend/app/schemas/model/chat_completion.py。函数定义模型ChatCompletionFunction中参数部分支持string、number、integer、boolean、array、object等类型array类型可声明itemsstring类型可声明enum每个参数描述最长 512 字符见 backend/app/models/inference/chat_completion_function.py。当模型决定调用函数时响应中的message.function_calls会携带id、name与arguments结构化参数字典。推理服务端还有专门的build_function_call逻辑解析模型返回的参数字符串并将其转换为结构化字典见 inference/app/models/chat_completion/model.py。与流式一样函数调用也需要模型本身支持——请求携带functions时会检查model.allow_function_call()不支持则报错backend/app/routes/inference/chat_completion.py。八、进阶调用形态REST API 与 OpenAI 兼容 API除 Python SDK 外TaskingAI 还提供 REST API 与 OpenAI 兼容 API 两种调用形态代码模板分别位于backend/resources/code_templates/model/3_rest_api/1_inference/1_chat_completion.md原生 RESTbackend/resources/code_templates/model/4_openai_compatible_api/1_stateless_invocation/1_chat_completion.mdOpenAI 兼容8.1 原生 REST API原生接口为POST /v1/inference/chat_completion请求体结构与 SDK 对应curl -X POST $$SERVICE_HOST$$/v1/inference/chat_completion \ -H Authorization: Bearer $$API_KEY$$ \ -H Content-Type: application/json \ -d { model_id: $$MODEL_ID$$, configs: {temperature: 0.5}, stream: false, messages: [ {content: What is the sum of 12 23?, role: user} ] }多轮场景只需把历史消息按顺序加入messages数组user → assistant → user。model_id字段同时支持模型 ID 与 Assistant ID——传入 Assistant ID 时后端会走StatelessNormalSession/StatelessStreamSession会话流程由 Assistant 编排模型、检索与工具见 backend/app/routes/inference/chat_completion.py。8.2 OpenAI 兼容 API若你的代码已基于 OpenAI SDK可直接将base_url指向 TaskingAI 服务、api_key换成 TaskingAI API Keyfrom openai import OpenAI client OpenAI( api_key$$TASKINGAI_API_KEY$$, base_url$$SERVICE_HOST$$/v1, ) response client.chat.completions.create( model$$MODEL_ID$$, messages[ {role: user, content: What is the sum of 12 23?}, ], ) print(response)后端将 OpenAI 格式的请求适配为内部ChatCompletionRequest后统一处理见 backend/app/routes/openai/chat_completion.py 中的adapt_openai_chat_completion_input调用从而以极低迁移成本复用既有 OpenAI 生态工具链。九、底层调用链一次 chat_completion 的完整旅程从模板中的 SDK 调用到最终模型响应一条完整的链路如下SDK 层taskingai.inference.chat_completion构造消息对象并发起 HTTP 请求后端 API 层POST /v1/inference/chat_completion接收ChatCompletionRequest校验消息角色、函数调用能力与流式能力合并模型默认配置与请求配置backend/app/routes/inference/chat_completion.py服务层chat_completion/stream_chat_completion将请求转发至独立的推理服务TASKINGAI_INFERENCE_URL/v1/chat_completion携带model_schema_id、provider_model_id、加密后的凭证encrypted_credentials、模型属性与配置backend/app/services/inference/chat_completion.py推理服务层validate_chat_completion_model校验配置合法性随后由对应厂商的 Provider 适配器完成真实推理响应回传非流式直接返回ChatCompletion流式则按 SSE 协议逐块推送ChatCompletionChunk。值得注意的细节是模型回退fallback机制当主模型调用失败时后端会按base_model.fallbacks.model_list依次尝试备用模型全部失败才统一抛出 Provider 错误并将主模型的错误信息附带在响应中见 backend/app/routes/inference/chat_completion.py。这一机制大幅提升了线上推理的可用性也是生产环境中值得重点使用的特性。十、写在最后从模板到生产的建议消息顺序是上下文的关键多轮对话务必按system → user → assistant → ...的时间顺序传递完整历史configs 与模型 schema 强绑定并非所有参数对所有模型生效填写前先确认目标模型的config_schemas约束流式与函数调用需要模型能力支撑调用前可通过模型属性streaming、function_call确认能力边界善用 fallback 与 OpenAI 兼容层前者保障稳定性后者降低既有代码的迁移成本。如需深入了解流式模式与函数调用的完整示例可继续阅读仓库中的 REST API 模板 与 OpenAI 兼容 API 模板若你使用异步代码还可参考 异步 Python 模板其中使用await taskingai.inference.a_chat_completion(...)完成同样的单轮与多轮对话。赞分享人工智能大模型AI AgentRAG后端前端【免费下载链接】TaskingAIThe open source platform for AI-native application development.项目地址https://gitcode.com/gh_mirrors/ta/TaskingAI点击查看免费下载相关推荐BG3ModManager深度解析打造完美博德之门3模组体验的专业指南BG3ModManager深度解析打造完美博德之门3模组体验的专业指南 BG3ModManager作为《博德之门3》玩家必备的模组管理神器凭借其直观的操作界人工智能大模型AI AgentRAG后端前端TaskingAI 实战指南使用 Python SDK 的 get_chat 获取指定对话Chat完整解析TaskingAI 实战指南使用 Python SDK 的 get_chat 获取指定对话Chat完整解析 本文聚焦 TaskingAI 后端 Assis人工智能大模型AI AgentRAG后端前端Apache Artemis安全配置实战从认证授权到SSL/TLS加密全流程Apache Artemis安全配置实战从认证授权到SSL/TLS加密全流程 Apache Artemis是一款高性能、可扩展的开源消息中间件在企业级消息队消息队列后端网络与通信上一篇SQLite3绑定类型错误分析与修复Duix-Avatar数据库操作优化方案下一篇r2modmanPlus 错误处理与调试技巧常见问题排查与解决方案大全创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

【C#】C#窗体应用修改窗体的标题和图标

【C#】C#窗体应用修改窗体的标题和图标

修改窗体顶部的标题和图表,如果不修改则会使用默认的图标,标题默认为Form1,如第一张图,这时候如果想换成和系统有关的内容,如第二张图,可以使用下面的方法进行修改,修改后打开该软件任务栏显示的…

2026/10/13 5:54:39 阅读更多 →
让Agent告别工具调用混乱:技能层设计思路与落地实战

让Agent告别工具调用混乱:技能层设计思路与落地实战

做Agent应用开发这段时间,我踩过最大的坑不是模型能力不够,而是我自己把工具调用写得像一团乱麻。一开始只是把几个工具函数丢给大模型,让它自己选;等工具一多,模型开始瞎选,Prompt越来越长,维护…

2026/10/13 5:54:39 阅读更多 →
Tectonic 的 mac_core 解析:如何在 Rust 中安全地暴露 macOS CoreFoundation 与 CoreText 框架

Tectonic 的 mac_core 解析:如何在 Rust 中安全地暴露 macOS CoreFoundation 与 CoreText 框架

CLI 【免费下载链接】tectonic A modernized, complete, self-contained TeX/LaTeX engine, powered by XeTeX and TeXLive. 项目地址: https://gitcode.com/gh_mirrors/te/tectonic 点击查看 免费下载 在 Tectonic 这个自包含的 XeTeX/TeXLive 排版引擎中&#xf…

2026/10/13 5:54:39 阅读更多 →

最新新闻

FPGA入门必做:可逆计数器设计详解与上板调试

FPGA入门必做:可逆计数器设计详解与上板调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 6:41:49 阅读更多 →
外贸企业如何借助社交媒体拓展海外市场

外贸企业如何借助社交媒体拓展海外市场

一、行业现状:海外社交媒体成为外贸获客新渠道近年来,随着数字技术的发展和全球消费习惯的变化,海外社交媒体已不再仅仅是个人社交娱乐的平台,而是逐步成为外贸企业触达海外客户、展示品牌形象、获取商业询盘的重要渠道。Facebook…

2026/10/13 6:41:49 阅读更多 →
Modbus TCP设备通信代码

Modbus TCP设备通信代码

一、核心前置知识点:Modbus TCP协议帧格式(必考背诵)1.1 请求报文(Rx 读取请求帧)帧示例:00 01 00 00 00 06 01 03 00 00 00 04字节段含义说明00 01事务ID(Transaction ID)请求与响应必须一致,用…

2026/10/13 6:41:49 阅读更多 →
Apache Calcite 1.4.0-incubating 发布解析:RelBuilder 关系代数构建器 API 的诞生

Apache Calcite 1.4.0-incubating 发布解析:RelBuilder 关系代数构建器 API 的诞生

后端数据库 【免费下载链接】calcite Apache Calcite 项目地址: https://gitcode.com/gh_mirrors/ca/calcite 点击查看 免费下载 2015 年 9 月 2 日,Apache Calcite(Incubating)发布 1.4.0-incubating 版本,这一版本在…

2026/10/13 6:41:49 阅读更多 →
Peekaboo 实时多目标认证协调器:双后台控制器与前台语义重叠的行为契约全解析

Peekaboo 实时多目标认证协调器:双后台控制器与前台语义重叠的行为契约全解析

GUI 自动化MCP 服务AI 应用 【免费下载链接】Peekaboo Peekaboo is a macOS CLI & optional MCP server that enables AI agents to capture screenshots of applications, or the entire system, with optional visual question answering through local or remote AI mod…

2026/10/13 6:41:49 阅读更多 →
链栈实验避坑指南:头歌数据结构实训全解析

链栈实验避坑指南:头歌数据结构实训全解析

简介:头歌数据结构链栈基本操作与应用学习资料包,面向正在学习数据结构与C实现的学生,以链栈这一动态栈结构为主线展开讲解。内容详细梳理链表节点定义、链栈结构体设计,以及初始化、销毁、清空、判空、求长、取栈顶、入栈、出栈、…

2026/10/13 6:40:49 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →