2025.10.25
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
|
||||
## 💕注意事项
|
||||
|
||||
代码可一键运行即可,主要是感受,没有关键知识点。
|
||||
代码能一键运行即可,主要是感受,没有关键知识点。
|
||||
@@ -1,4 +1,6 @@
|
||||
## 💕注意事项
|
||||
|
||||
1. llm模型调用是deepseek官网推荐的调用流程,这个结构是我们以后调用api常用的方法。
|
||||
2. 多轮问答agent涵盖llm、prompt、memory几个模块。如果想改变ai身份的提示词与初始提问,直接更改messages里的content即可。
|
||||
- 知识点:**LLM了解与调用、Prompt编写与逻辑构思、多轮对话记忆、独立搭建一个智能体**
|
||||
|
||||
1. llm模型调用:是deepseek官网推荐的调用流程,这个结构是我们以后调用api常用的方法。
|
||||
2. 多轮问答agent:涵盖llm、prompt、memory几个模块。如果想改变ai身份的提示词与初始提问,直接更改messages里的content即可。
|
||||
@@ -0,0 +1,91 @@
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
from openai import OpenAI
|
||||
import json
|
||||
|
||||
load_dotenv()
|
||||
|
||||
|
||||
def create_client():
|
||||
api_key = os.getenv("OPENAI_API_KEY")
|
||||
return OpenAI(api_key=api_key, base_url="https://api.deepseek.com")
|
||||
|
||||
def get_weather(location):
|
||||
# 模拟获得天气信息
|
||||
return f"{location}当前天气:23℃,晴,风力2级"
|
||||
|
||||
|
||||
# 以下格式为固定写法,一般仅需改description与name
|
||||
get_weather_func = {
|
||||
"name": "get_weather", # 函数名称
|
||||
"description": "获取指定城市的天气情况", # 对该函数的描述
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"location": {
|
||||
"type": "string", # 该参数类型
|
||||
"description": "城市名称,如北京、上海等" # 对该参数的描述
|
||||
}
|
||||
},
|
||||
"required": ["location"] # 声明必填
|
||||
}
|
||||
}
|
||||
|
||||
# 固定写法,有多少个tool就往里追加多少个
|
||||
tools = [
|
||||
{
|
||||
"type": "function",
|
||||
"function": get_weather_func
|
||||
}
|
||||
]
|
||||
|
||||
def chat_loop(agent_client, tools):
|
||||
messages = [
|
||||
{"role": "system",
|
||||
"content": "你是一个善解人意会热心回答人问题的助手。如果你感觉你回答不了当前问题,就会调用函数来回答。"},
|
||||
{"role": "user", "content": "北京今天的天气怎么样?"}
|
||||
]
|
||||
response = agent_client.chat.completions.create(
|
||||
model="deepseek-chat",
|
||||
messages=messages,
|
||||
tools=tools, # 调用工具
|
||||
tool_choice="auto" # 模型自主选择是否调用工具
|
||||
)
|
||||
message = response.choices[0].message
|
||||
# 如果有该参数,证明ai调用了工具
|
||||
if message.tool_calls:
|
||||
# 对每个可能要调用的工具进行循环
|
||||
for tool_call in message.tool_calls:
|
||||
if tool_call.function.name == "get_weather":
|
||||
# 解析参数
|
||||
args = json.loads(tool_call.function.arguments) # 获取用户关键词的参数
|
||||
location = args.get("location", "未知地点")
|
||||
|
||||
# 调用真实参数
|
||||
weather_info = get_weather(location)
|
||||
|
||||
# 将函数执行结果以"tool"角色传给模型,等待后面二次调用
|
||||
messages.append(message) # 先添加模型的原始响应
|
||||
messages.append({
|
||||
"role": "tool",
|
||||
"tool_call_id": tool_call.id,
|
||||
"name": tool_call.function.name,
|
||||
"content": weather_info
|
||||
})
|
||||
# 第二次调用,让模型基于工具返回的结果再生成最终答案
|
||||
final_res = agent_client.chat.completions.create(
|
||||
model="deepseek-chat",
|
||||
messages=messages
|
||||
)
|
||||
print('已调用工具...')
|
||||
print(f'回答:{final_res.choices[0].message.content}')
|
||||
else:
|
||||
# 模型没有要调用工具,直接返回
|
||||
print('未调用工具...')
|
||||
print(f'回答:{response.choices[0].message.content}')
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
client = create_client()
|
||||
chat_loop(client, tools)
|
||||
@@ -0,0 +1,83 @@
|
||||
from dotenv import load_dotenv
|
||||
from openai import OpenAI
|
||||
import json
|
||||
import os
|
||||
import requests
|
||||
|
||||
load_dotenv()
|
||||
|
||||
def create_client():
|
||||
api_key = os.getenv("OPENAI_API_KEY")
|
||||
return OpenAI(api_key=api_key, base_url="https://api.deepseek.com")
|
||||
|
||||
# 通过api调用获得当前ip与位置
|
||||
def get_addr():
|
||||
res_ip = requests.get('https://ipapi.co/ip/').text
|
||||
res_city = requests.get('https://ipapi.co/city/').text
|
||||
return f'ip地址:{res_ip},所在城市:{res_city}'
|
||||
|
||||
|
||||
get_addr_func = {
|
||||
"name": "get_addr", # 函数名称
|
||||
"description": "获取用户的ip地址与城市", # 对该函数的描述
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {}, # 参数为空,那么这两个地方也是空的
|
||||
"required": []
|
||||
}
|
||||
}
|
||||
|
||||
tools = [
|
||||
{
|
||||
"type":"function",
|
||||
"function":get_addr_func
|
||||
}
|
||||
]
|
||||
|
||||
def chat_loop(agent_client,tools):
|
||||
messages = [
|
||||
{"role": "system","content": "你是一个善解人意会热心回答人问题的助手。如果你感觉你回答不了当前问题,就会调用函数来回答。"},
|
||||
{"role": "user", "content": "我现在在哪个城市,ip地址是多少?"}
|
||||
]
|
||||
response = agent_client.chat.completions.create(
|
||||
model="deepseek-chat",
|
||||
messages=messages,
|
||||
tools=tools,
|
||||
tool_choice="auto"
|
||||
)
|
||||
message = response.choices[0].message
|
||||
if message.tool_calls:
|
||||
for tool_call in message.tool_calls:
|
||||
if tool_call.function.name == "get_addr":
|
||||
# 解析参数
|
||||
# args = json.loads(tool_call.function.arguments) # 获取用户关键词的参数
|
||||
# location = args.get("location")
|
||||
# 调用真实参数
|
||||
# your_info = get_weather(location)
|
||||
|
||||
# 这里无参数,直接调用函数就行
|
||||
your_info = get_addr()
|
||||
messages.append(message)
|
||||
messages.append({
|
||||
"role": "tool",
|
||||
"tool_call_id": tool_call.id,
|
||||
"name": tool_call.function.name,
|
||||
"content": your_info
|
||||
})
|
||||
final_res = agent_client.chat.completions.create(
|
||||
model="deepseek-chat",
|
||||
messages=messages
|
||||
)
|
||||
print('已调用工具...')
|
||||
print(f'回答:{final_res.choices[0].message.content}')
|
||||
else:
|
||||
# 模型没有要调用工具,直接返回
|
||||
print('未调用工具...')
|
||||
print(f'回答:{response.choices[0].message.content}')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
client = create_client()
|
||||
chat_loop(client, tools)
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
## 💕注意事项
|
||||
|
||||
- 知识点:**Function calling原理、工具函数封装、API接入实践、多轮调用流程、Agent能力扩展**
|
||||
|
||||
1. 自定义函数调用:使用一个假函数来模拟完成function calling代码构建流程。重点是学会如何调用外部工具函数
|
||||
2. API调用:调用一个真的外部工具函数来完成API调用。重点是学会如何通过API文档学会构建一个可被调用的外部函数。强烈推荐自己找一个其他的任意API给AI作为测试,看它能否调用你提供的工具。
|
||||
@@ -1,37 +1,88 @@
|
||||
# 💻 Agent Craft
|
||||
# 🤖 Agent Craft
|
||||
|
||||
> 智能体开发教学库 | A beginner-friendly guide to building AI agents
|
||||
|
||||
## 📘 项目简介
|
||||
|
||||
🔥 从零开始上手agent智能体,掌握langchain、rag、prompt、langgraph等核心技术栈
|
||||
**Agent Craft** 是一个系统性开源教学项目,采用 **「博客讲解 + 代码实践」双驱动模式**,带你从零构建完整的 AI Agent 开发能力。
|
||||
|
||||
本仓库专注于 AI Agent 开发的学习与实践,通过系统化的案例和详细的代码注释,帮助开发者快速掌握从基础LLM调用到复杂Agent构建的完整技能栈。
|
||||
- 📄 **配套博客详解**:每章内容均配有 CSDN
|
||||
深度文章,涵盖原理剖析、代码解析与调试技巧
|
||||
- 💻 **可运行代码仓库**:每个模块对应独立目录,含完整代码、注释与运行指引,支持本地复现
|
||||
- 🚀 内容覆盖:从 **Prompt 工程** 到 **LangChain / LangGraph / RAG / SDK 封装**
|
||||
- ⚙️ 能力进阶:涵盖 **智能体思维链、工具调用、任务规划、多智能体协作**
|
||||
|
||||
💡 项目将持续更新,目标是构建一个系统、实用的 AI Agent 学习案例库。
|
||||
|
||||
📘 本仓库开箱即用,仅需配置 API_KEY。
|
||||
|
||||
✍️ 代码可与博客配套使用,博客会重点讲解Agent知识构建与流程解析。
|
||||
|
||||
博客同步发布:
|
||||
|
||||
👉 [我的CSDN主页](https://blog.csdn.net/2401_87328929)
|
||||
|
||||
👉 [CSDN对应专栏](https://blog.csdn.net/2401_87328929/category_12970267.html)
|
||||
|
||||
🙋♂️ 技术交流 / 更新 / 答疑:微信 **a19731567148**(备注 GitHub)
|
||||
> 💡 本仓库目标:帮助开发者从零构建可运行的智能体应用,真正理解 Agent 的底层逻辑,而不仅仅是“调用框架”。
|
||||
|
||||
---
|
||||
## 🚅 目录跳转
|
||||
|
||||
| 仓库 | 博客 | 技术栈 | 知识点 | 难度 |
|
||||
|---------------------------------------------------|------------------------------------------------|------------------|----------------------|-----|
|
||||
| [01 Agent 入门 & 快速运行](https://github.com/Annyfee/agent-craft/tree/main/01%20Agent%20%E5%85%A5%E9%97%A8%20%26%20%E5%BF%AB%E9%80%9F%E8%BF%90%E8%A1%8C) | [🏠](https://blog.csdn.net/2401_87328929/article/details/153729555) | 基础LLM | Agent概念 | ⭐ |
|
||||
| [02 LLM基础与调用](https://github.com/Annyfee/agent-craft/tree/main/02%20LLM%E5%9F%BA%E7%A1%80%E4%B8%8E%E8%B0%83%E7%94%A8) | [🏠](https://blog.csdn.net/2401_87328929/article/details/153735431) | LLM/API调用/Prompt | 调用模型接口、初识prompt、多轮对话 | ⭐ |
|
||||
## 🧭 模块总览(16 模块)
|
||||
|
||||
> 💡 每个模块对应独立目录(含代码、说明与示例),可独立运行与学习。
|
||||
> 🔥 已更新至 03 Function Calling 与工具调用,持续更新中!
|
||||
|
||||
| 章节 | 模块 | 博客 | 核心关键词 | 难度 |
|
||||
|:-----------:|:--------------------------------------------------------|:-------------------------------------------------------------------:|:--------------------------------|:----:|
|
||||
| 🏗️ **基础篇** | [01 Agent 入门 & 环境搭建](01%20Agent%20入门%20&%20环境搭建/) | [🏠](https://blog.csdn.net/2401_87328929/article/details/153729555) | Python · OpenAI API | ⭐ |
|
||||
| | [02 LLM 基础调用](02%20LLM基础与调用/) | [🏠](https://blog.csdn.net/2401_87328929/article/details/153735431) | LLM API 调用 · 参数配置 | ⭐ |
|
||||
| | [03 Function Calling 与工具调用](04%20FunctionCalling与工具调用/) | [🏠](https://blog.csdn.net/2401_87328929/article/details/153866573) | Function Call · 工具注册 | ⭐⭐ |
|
||||
| ⚙️ **框架篇** | 04 LangChain 基础篇 | 🚧 撰写中 | Chain 架构 · Tool 使用 | ⭐⭐ |
|
||||
| | 05 LangChain 进阶篇 | 🚧 | Memory · 多链协作 · Agent | ⭐⭐⭐ |
|
||||
| | 06 LangGraph 入门 | 🚧 | Flow · Node · Edge 控制 | ⭐⭐⭐ |
|
||||
| | 07 RAG 基础篇(Embedding & 向量) | 🚧 | 向量化 · 检索匹配 | ⭐⭐ |
|
||||
| | 08 RAG 进阶篇(检索 + 生成) | 🚧 | RAG Pipeline · QA 系统 | ⭐⭐⭐ |
|
||||
| 🧠 **智能篇** | 09 MCP 基础 | 🚧 | MCP 协议 · 客户端安装 | ⭐⭐ |
|
||||
| | 10 MCP 进阶 | 🚧 | 在线模型接入 · 多轮任务 | ⭐⭐⭐ |
|
||||
| | 11 MCP 高级 | 🚧 | 多服务组合 · 并发调用 | ⭐⭐⭐⭐ |
|
||||
| | 12 多步骤任务规划(MCP Task Planning) | 🚧 | Task Planning · CoT | ⭐⭐⭐ |
|
||||
| | 13 多智能体协作 | 🚧 | Multi-Agent · 通信机制 | ⭐⭐⭐⭐ |
|
||||
| | 14 综合案例实战 | 🚧 | LangChain + RAG + Tool + Memory | ⭐⭐⭐⭐ |
|
||||
| 🚀 **工程篇** | 15 部署与本地化 | 🚧 | Ollama · LM Studio · API代理 | ⭐⭐⭐ |
|
||||
| | 16 Agent SDK 封装 | 🚧 | 模块化封装 · SDK 架构 | ⭐⭐⭐⭐ |
|
||||
|
||||
---
|
||||
|
||||
## 🧩 当前学习建议(适用于已完成模块)
|
||||
|
||||
目前已开放模块:**01 ~ 03**。
|
||||
建议按顺序学习,每一章都有完整代码示例与注释。
|
||||
|
||||
### ✅ 模块 01 — Agent 入门 & 环境搭建
|
||||
|
||||
- **目标**:理解 Agent 概念,完成环境配置与首次调用。
|
||||
- **内容**:环境依赖、API Key 配置、最小可运行 Agent。
|
||||
|
||||
### ✅ 模块 02 — LLM 基础调用
|
||||
|
||||
- **目标**:掌握模型调用逻辑,初步构建智能体能力。
|
||||
- **内容**:LLM了解与调用、Prompt编写与逻辑构思、多轮对话记忆、独立搭建一个智能体。
|
||||
|
||||
### ✅ 模块 03 — Function Calling 与工具调用
|
||||
|
||||
- **目标**:实现 LLM 调用外部函数,赋予模型“执行力”。
|
||||
- **内容**:Function calling原理、工具函数封装、API接入实践、多轮调用流程、Agent能力扩展。
|
||||
|
||||
> 📌 后续模块将陆续开放(LangChain、RAG、MCP、多智能体等),建议先完整学习前 3 个模块,为进阶模块打好基础。
|
||||
|
||||
---
|
||||
|
||||
## 🧠 Agent Craft 的核心学习路径
|
||||
|
||||
> “让每个人都能真正理解 Agent 的底层逻辑,而不仅仅是调用框架。”
|
||||
|
||||
我们采用 **渐进式构建** 的教学理念,从最基础的 Prompt 开始,逐步搭建完整的 AI Agent 能力栈:
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A[Prompt 层] --> B[LLM 核心调用]
|
||||
B --> C[LangChain 工具链]
|
||||
C --> D[LangGraph 流程控制]
|
||||
D --> E[RAG 检索增强生成]
|
||||
E --> F[MCP 扩展能力]
|
||||
F --> G[多智能体协作与规划]
|
||||
G --> H[SDK 封装与部署]
|
||||
```
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 1️⃣ 环境准备
|
||||
@@ -53,6 +104,7 @@ cp .env.example .env
|
||||
```
|
||||
|
||||
在 `.env` 文件中配置:
|
||||
|
||||
```env
|
||||
OPENAI_API_KEY=your_deepseek_api_key_here
|
||||
```
|
||||
@@ -64,22 +116,15 @@ OPENAI_API_KEY=your_deepseek_api_key_here
|
||||
```bash
|
||||
python "01 Agent 入门 & 环境搭建/Agent-demo.py"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 学习路径
|
||||
## 🤝 参与和交流
|
||||
|
||||
### 🎯 第一章:Agent 入门 & 快速运行
|
||||
- **核心技能**: 运行Agent-demo
|
||||
- **学习目标**: 了解Agent是什么,怎么用
|
||||
- **技术要点**: 环境配置
|
||||
欢迎提交 **Issue / PR / 改进建议**
|
||||
|
||||
### 🎯 第二章:LLM基础与调用
|
||||
- **核心技能**: 多轮对话Agent构建
|
||||
- **学习目标**: 实现智能对话系统
|
||||
- **技术要点**: 对话历史、上下文管理、角色设定
|
||||
如果有商业/技术交流需求,请联系我:
|
||||
|
||||
## 🤝 贡献指南
|
||||
欢迎贡献代码 / 提交 Issue / Pull Request
|
||||
- Fork 仓库
|
||||
- 创建分支进行修改
|
||||
- 提交 PR 并描述修改内容
|
||||
📬 微信:a19731567148(备注 GitHub)
|
||||
|
||||
📖 个人博客:[CSDN 主页](https://blog.csdn.net/2401_87328929)
|
||||
|
||||
+2
-1
@@ -1,3 +1,4 @@
|
||||
dotenv~=0.9.9
|
||||
python-dotenv~=1.1.1
|
||||
openai~=2.6.0
|
||||
openai~=2.6.0
|
||||
requests~=2.32.5
|
||||
Reference in New Issue
Block a user