对话翻译App
20.8MB · 2026-04-06
在动手写第一行代码之前,定义清晰的目标至关重要。我不想做一个“聊天机器人”,而是希望它能主动完成任务。
我设定的Demo目标是: “帮我分析今日热点,并总结成一份简报” 。
这个任务需要智能体:
市面上框架很多(LangChain, LlamaIndex, Semantic Kernel等),我优先选择了 LangChain,原因很简单:
对于大模型(LLM),我选择了 DeepSeek,理由也很直接:
这里我剥离了项目结构,聚焦最核心的链路。完整项目代码已放在文末的GitHub仓库里。
第一步:搭建智能体的“大脑” (LLM + Prompt)
智能体的核心是一个能进行任务规划和链式思考的LLM。LangChain的 create_react_agent 帮我们封装了复杂的Prompt工程。
python
from langchain import hub
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import Tool
from langchain_community.llms import DeepSeek
# 1. 初始化大脑(LLM)
llm = DeepSeek(model="deepseek-chat", temperature=0.1) # temperature调低,让输出更稳定
# 2. 拉取一个优化过的ReAct提示模板(这是LangChain的神器之一)
prompt = hub.pull("hwchase17/react")
第二步:为智能体打造“工具箱” (Tools)
智能体之所以能“执行”,靠的就是Tools。我给它配备了三个基础工具:
python
# 工具1:网络搜索(模拟)
def search_web(query: str) -> str:
"""模拟搜索今日热点。实际可接入SerperAPI或Google Search API。"""
print(f"[智能体正在搜索]: {query}")
# 这里是模拟数据,真实情况调用API
mock_hot_news = [
"AI编程助手CodeGeeX发布4.0版本,宣称效率提升50%",
"深度学习框架PyTorch宣布官方支持Apple Silicon GPU加速",
"2024年DevOps状态报告:AI在自动化测试中渗透率超30%"
]
return "n".join(mock_hot_news)
# 工具2:内容提取(模拟)
def fetch_content(url: str) -> str:
"""模拟根据链接获取详细内容。"""
print(f"[智能体正在抓取内容]: {url}")
return f"这是关于'{url}'的详细报道内容摘要..."
# 工具3:文本总结
def summarize_text(text: str) -> str:
"""调用LLM对长文本进行总结。"""
print(f"[智能体正在总结内容]...")
# 这里实际上可以再调一次LLM,为简化,直接返回模拟总结
return f"核心要点:{text[:50]}..."
# 将函数包装成LangChain Tool
tools = [
Tool(name="Search", func=search_web, description="当你需要获取最新热点或搜索信息时使用此工具。"),
Tool(name="FetchContent", func=fetch_content, description="当你需要获取某个链接的具体内容时使用此工具。"),
Tool(name="Summarizer", func=summarize_text, description="当你需要总结长文本内容时使用此工具。"),
]
第三步:组装并运行智能体
把大脑、工具和提示词组装起来,智能体就诞生了。
python
# 3. 创建ReAct智能体
agent = create_react_agent(llm, tools, prompt)
# 4. 创建执行器,它会处理智能体的思考循环
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True)
# 5. 发布任务!
result = agent_executor.invoke({
"input": "请帮我分析今天的科技热点,并整理成一份简短的要点简报。"
})
print("n" + "="*50)
print("【智能体生成的最终简报】")
print(result["output"])
print("="*50)
当你运行上面的代码(记得安装依赖并填入自己的API Key),会在控制台看到类似下面的思考过程:
text
> 进入新的AgentExecutor链...
思考:用户需要一份今日科技热点简报。我需要先搜索热点,然后获取详细信息,最后总结。
行动:Search
行动输入:今日科技热点
[智能体正在搜索]: 今日科技热点
观察:AI编程助手CodeGeeX发布4.0版本... (省略)
思考:我得到了几条热点标题,需要获取其中一两条的详细内容来总结。
行动:FetchContent
行动输入:AI编程助手CodeGeeX发布4.0版本
[智能体正在抓取内容]: AI编程助手CodeGeeX发布4.0版本
观察:这是关于'AI编程助手...'的详细报道内容摘要...
思考:现在我有了一些细节,可以开始总结了。
行动:Summarizer
行动输入:[将搜索和抓取的内容组合]
[智能体正在总结内容]...
观察:核心要点:AI编程助手效率提升...
思考:我已经完成了热点搜索、内容获取和总结,可以给出最终答案了。
最终答案:根据今日热点,为您整理简报如下:1. AI编程助手CodeGeeX 4.0发布... (省略)
通过这个Demo,我清晰地验证了几个关键点:
hwchase17/react 这个Prompt模板已经嵌入了“Thought/Action/Observation”的格式,引导LLM进行正确推理。微调Prompt能极大改善表现。AgentExecutor中设置max_iterations参数(比如10-15次),强制退出。Tool的description至关重要!LLM完全依赖描述来决定是否调用该工具。描述要清晰、具体,说明适用场景。这个Demo只是一个起点。当你掌握了这个最小闭环,就可以尝试:
技术本身不是目的,解决问题才是。 动手搭建一次,你对所有那些“神奇”的Agent产品的理解,会完全不一样。