恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

【从零开发 AI Agent】【Day 1】【如何实现一问一答】

  • 首页
  • 资讯中心
  • /
  • 【从零开发 AI Agent】【Day 1】【如何实现一问一答】

相关资讯

Kafka实战 自定义Offset消费 手动Offset管理 2026/9/1 5:30:15
掌阅研发岗笔试全拆解:题型分布、核心考点与备考策略 2026/9/1 5:30:15
SpringBoot+Vue图书馆管理系统毕业设计:从CRUD到企业级业务闭环 2026/9/1 5:30:15

最新资讯

贝壳找房Java笔试复盘:从集合框架到算法题的完整考点清单
FaceFusion开源模型合规部署与AI安全实践
《我的世界》纯净生存服务器搭建:Java版与基岩版互通完整教程
华为AI岗备考全攻略:机试与面试核心考点解析
工业视觉颜色检测全流程解析:从康耐视VisionPro配置到工程实践
pstack验证技能:让Agent像真实用户一样验证应用

今日推荐

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

本周热门

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析
数字电路时序基石:深入理解建立时间与保持时间
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

【从零开发 AI Agent】【Day 1】【如何实现一问一答】

发布时间:2026/9/1 5:35:16
【从零开发 AI Agent】【Day 1】【如何实现一问一答】 AI AgentAI 智能体如何开发对此我制定了一个路线LLM API 单次调用实现一问一答LLM API 循环调用实现循环问答实现 Chatbot实现 Agent今天先讲讲如何实现一问一答Chapter 1. LLM API以 Python 环境中调用 DeepSeek 为例其实大模型的调用最底层只需要三行代码# 导入 requests 模块importrequests# 发送请求responserequests.post(urlhttps://api.deepseek.com/chat/completions,headers{Authorization:Bearer your_api_key},json{model:deepseek-v4-flash,messages:[{role:user,content:你好}],},)# 打印响应print(response.json())如此运行一次程序便能实现与大模型的一问一答。大模型只能一问一答这是日后开发 Chatbot 和 Agent 的核心、关键为了安全起见我一般会把密钥写入环境变量。如果你的密钥也和我一样写入了电脑环境里或者当前终端的临时环境中那么你可以用下面的方式来使用你的密钥# 导入模块importosimportrequests# 读取环境变量中的密钥api_keyos.getenv(DEEPSEEK_API_KEY)# 发送请求responserequests.post(urlhttps://api.deepseek.com/chat/completions,headers{Authorization:fBearer{api_key}},json{model:deepseek-v4-flash,messages:[{role:user,content:你好}],},)# 打印响应print(response.json())现在我们可以通过 API 调用得到了自己的 AI 助手。虽然它现在还很简陋但是恭喜你已经获得了大模型的能力。那么接下来的开发路径便产生了分支。一问一答循环问答Web UI终端输入消息存储流式输出我首先选择实现终端输入代码如下# 导入模块importosimportrequests# 读取环境变量中的密钥api_keyos.getenv(DEEPSEEK_API_KEY)# 终端输入questioninput(请输入问题)# 发送请求responserequests.post(urlhttps://api.deepseek.com/chat/completions,headers{Authorization:fBearer{api_key}},json{model:deepseek-v4-flash,messages:[{role:user,content:question}],},)# 打印响应print(response.json())达成了终端输入成就之后解除了输入的限制总算像那么点回事了。但是眼下大模型的回答似乎有点奇怪……这和咱们平时用的AI对话起来似乎很不一样啊有太多“杂乱无章”的东西。没关系我们耐下心来一一拆解它们。换换行让其中的细节更加明显一些{id:33fa70d1-b89c-4b87-b658-d4bd13c187f4,object:chat.completion,created:1788102644,model:deepseek-v4-flash,choices:[{index:0,message:{role:assistant,content:你好我是 DeepSeek由深度求索公司开发的 AI 助手。\n\n我可以帮你做很多事情比如\n\n- **回答问题**涵盖知识、生活、科技、学习等各种领域\n- **写作与创作**文章、文案、代码、方案等\n- **分析总结**帮你整理信息、提炼重点\n- **编程辅助**写代码、调试、讲解技术概念\n\n我的一些特点\n\n- **免费使用**目前完全免费没有收费计划\n- **支持长文本**上下文窗口达到 1M可以一次性处理超长内容\n- **文件上传**支持上传图片、PDF、Word、Excel、PPT 等文件我会读取其中的文字信息帮你处理\n- **联网搜索**需要时可以手动开启联网功能获取实时信息\n- **语音输入**App 端支持语音交互\n\n我的知识截止日期是 2025 年 5 月。虽然我不支持多模态视觉识别比如识别图片内容但可以读取图片中的文字。\n\n有什么我可以帮你的吗尽管问我吧,reasoning_content:We need answer in Chinese. Need introduce myself. As AI assistant from DeepSeek. Mention capabilities, free, knowledge cutoff, file upload, context. Keep concise.},logprobs:None,finish_reason:stop}],usage:{prompt_tokens:85,completion_tokens:263,total_tokens:348,prompt_tokens_details:{cached_tokens:0},completion_tokens_details:{reasoning_tokens:34},prompt_cache_hit_tokens:0,prompt_cache_miss_tokens:85},system_fingerprint:a26a7955944dc5c60445bff77fac9c8e}蛙趣这行数可真多啊没关系我们先关注我们最关心的东西——像我们平时使用的 AI 对话中的回答的部分在哪content:你好我是 DeepSeek由深度求索公司开发的 AI 助手。\n\n我可以帮你做很多事情比如\n\n- **回答问题**涵盖知识、生活、科技、学习等各种领域\n- **写作与创作**文章、文案、代码、方案等\n- **分析总结**帮你整理信息、提炼重点\n- **编程辅助**写代码、调试、讲解技术概念\n\n我的一些特点\n\n- **免费使用**目前完全免费没有收费计划\n- **支持长文本**上下文窗口达到 1M可以一次性处理超长内容\n- **文件上传**支持上传图片、PDF、Word、Excel、PPT 等文件我会读取其中的文字信息帮你处理\n- **联网搜索**需要时可以手动开启联网功能获取实时信息\n- **语音输入**App 端支持语音交互\n\n我的知识截止日期是 2025 年 5 月。虽然我不支持多模态视觉识别比如识别图片内容但可以读取图片中的文字。\n\n有什么我可以帮你的吗尽管问我吧,content的中文意思就是“内容”。很显然这段代码本质上是一个键值对key value pair。键和值都是字符串类型的。那么右边的这部分字符串便是 AI 回答的内容了。既是现在已经把回答内容单独取出来了可是这个内容本身还是看起来很奇怪。我们使用代码放大器把它再放大一点聚焦其中的细节。你好我是 DeepSeek由深度求索公司开发的 AI 助手。\n\n我可以帮你做很多事情比如\n\n- **回答问题**涵盖知识、生活、科技、学习等各种领域\n- **写作与创作**文章、文案、代码、方案等\n- **分析总结**帮你整理信息、提炼重点\n- **编程辅助**写代码、调试、讲解技术概念\n\n我的一些特点\n\n- **免费使用**目前完全免费没有收费计划\n- **支持长文本**上下文窗口达到 1M可以一次性处理超长内容\n- **文件上传**支持上传图片、PDF、Word、Excel、PPT 等文件我会读取其中的文字信息帮你处理\n- **联网搜索**需要时可以手动开启联网功能获取实时信息\n- **语音输入**App 端支持语音交互\n\n我的知识截止日期是 2025 年 5 月。虽然我不支持多模态视觉识别比如识别图片内容但可以读取图片中的文字。\n\n有什么我可以帮你的吗尽管问我吧通篇出现了明显的重复结构——成对的双星号如果你有使用 Markdown 的经验那么你不难回想到这是 Markdown 的文字加粗语法继而我们不妨大胆猜测——这段字符串是 Markdown 格式的文本。但是如何直接复制粘贴到.md文件中的话只能得到以下效果那是因为这段文本其实不是严格意义上的 Markdown 文本而是一段带转义符的 Markdown 文本。\n表示换行-表示列表项。那么怎样才能把它转化为一个常见的 Markdown 文本呢想要转化首先我们需要搞清楚这段内容与我们前面得到的响应之间的关系毕竟我们总不能每次都从一坨大模型返回的结果中挑出这一小部分再拿去转化呀我们希望我们的程序能够自动进行解析。我们重新看一眼大模型返回的内容不过content对应的值我们前面研究过了这一次可以把它忽略掉避免我们的注意力分散减少我们的认知压力{id:33fa70d1-b89c-4b87-b658-d4bd13c187f4,object:chat.completion,created:1788102644,model:deepseek-v4-flash,choices:[{index:0,message:{role:assistant,content:,reasoning_content:We need answer in Chinese. Need introduce myself. As AI assistant from DeepSeek. Mention capabilities, free, knowledge cutoff, file upload, context. Keep concise.},logprobs:None,finish_reason:stop}],usage:{prompt_tokens:85,completion_tokens:263,total_tokens:348,prompt_tokens_details:{cached_tokens:0},completion_tokens_details:{reasoning_tokens:34},prompt_cache_hit_tokens:0,prompt_cache_miss_tokens:85},system_fingerprint:a26a7955944dc5c60445bff77fac9c8e}content: 是一个键值对那么什么地方会有键值对呢没错字典哪里有字典呢根据就近原则我们逐行向上打量。找到了message是一个字典。message:{}这个message也不一般也是一个键所以一定存在着更大的字典不过我们当前先不管先管好眼前——这个字典是怎样的呢message:{role:assistant,content:,reasoning_content:}message中文“消息”的意思。它此时作为一个字典包含三个元素rolecontentreasoning_content。前面初步分析过了content现在我们先看看与它最相似的reasoning_content是什么吧reasoning content中文意思是“推理内容”。它对应的就是大模型的推理思也就是常听说的思维链CoTChain of Thought1。reasoning_content:We need answer in Chinese. Need introduce myself. As AI assistant from DeepSeek. Mention capabilities, free, knowledge cutoff, file upload, context. Keep concise.最后一个元素是rolerole的中文含义是“角色”对应的值assistant则是“助手”的意思。逐一解析了message的细节之后我们再回过头去重新打量一下message的整体message:{role:assistant,content:,reasoning_content:}有没有发现它的形象似曾相识——messages:[{role:user,content:你好}]messages:[{role:user,content:question}]相似之中又有所不同。大模型的响应结果中message的值是一个字典而我们前面在请求的时候message是一个列表。这其中自有玄机后面我们很快就会用到这个细微的差别。现在我们知道了content是message字典中的一个键值对那么如何获取它的值呢这个方法也就随即确定了message[content]只不过这个message也是一个字典元素单靠上面那样子还不足以达到访问回答内容的目的。我么还需要继续分析一下大模型的响应结果。message所属于的字典在哪呢{index:0,message:{},logprobs:None,finish_reason:stop}这个花括号括{}起来的部分便是message所在的字典而这个字典又位于数组中。choices:[{index:0,message:{},logprobs:None,finish_reason:stop}],并且这个数组只有一个元素就是message所在的这个字典。因此我们可以这样访问回答内容[0][message][content]而这个数组呢又是键choices所对应的值{id:33fa70d1-b89c-4b87-b658-d4bd13c187f4,object:chat.completion,created:1788102644,model:deepseek-v4-flash,choices:[],...}choices同样位于一个更大的字典中而这个字典是谁呢这个字典就出现在我们用来打印大模型响应结果的那句指令之中——print(response.json())即response.json()。至此我们总算理清楚了程序自动访问回答内容的指令response.json()[choices][0][message][content]而如果你想要在终端输出你只需在外面套一层print()即可。# 导入模块importosimportrequests# 读取环境变量中的密钥api_keyos.getenv(DEEPSEEK_API_KEY)# 终端输入questioninput(请输入问题)# 发送请求responserequests.post(urlhttps://api.deepseek.com/chat/completions,headers{Authorization:fBearer{api_key}},json{model:deepseek-v4-flash,messages:[{role:user,content:question}],},)# 打印响应中的回答内容print(response.json()[choices][0][message][content])以上便是今日的开发 or 学习笔记——如何在 Python 环境中调用 LLM API 进行一问一答。明天我们将学习如何流式输出让 AI 的回答一个字一个字、一个词一个词蹦出就仿佛是在一边思考一边回复一样。以及如何存储对话消息记录为持续对话提供关键的基石。Chain-of-Thought Prompting Elicits Reasoning in Large Language Models ↩︎

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号