综合项目
目标: 不看答案,自己做一个能演示的助手。这是「精通」之前的收束作业,不是再讲新 API。
必须具备
- 至少一个真实工具(可以是天气桩、也可以是读本地文件)
- 多轮记忆(
thread_id) - 一份你自己写的资料 + 检索后回答(RAG,假向量也行,但资料必须是你的)
- 一条不打 API 的测试(fake 模型或纯函数断言)
任选一个加分
- 中间件限流或 HITL
- Skills / 一个子代理
stream(version="v2")打印进度- SqliteSaver 落盘
建议实现顺序(不要一上来画大图)
- L02 最小 agent + 你的工具
- 加上 L03 记忆
- 用 L05 第 3 段(检索挂成工具),资料换成你的 5~10 条笔记;问两个问题:一个资料里有、一个没有
- 把 L08 的测试改成断言「你的工具名」
- 需要分阶段再考虑 L09/L10/L11
骨架(可复制后改,不要原样交作业)
from dotenv import load_dotenv
load_dotenv()
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from langchain.tools import tool
from langchain_core.documents import Document
from langchain_core.embeddings import FakeEmbeddings
from langchain_core.vectorstores import InMemoryVectorStore
from langgraph.checkpoint.memory import InMemorySaver
model = init_chat_model(
"deepseek:deepseek-chat",
temperature=0.5,
max_tokens=2500,
timeout=300,
max_retries=6,
)
NOTES = [
Document(page_content="在这里换成你自己的知识。"),
Document(page_content="再写一条只有你知道的规定。"),
]
store = InMemoryVectorStore(embedding=FakeEmbeddings(size=64))
store.add_documents(NOTES)
@tool
def search_notes(query: str) -> str:
"""在私人笔记里检索。回答制度/流程/内部规定时必须调用。"""
hits = store.similarity_search(query, k=3)
return "\n".join(h.page_content for h in hits) or "没有检索到。"
agent = create_agent(
model=model,
tools=[search_notes],
system_prompt="内部问题必须先 search_notes。资料没有就说不知道。",
checkpointer=InMemorySaver(),
)
cfg = {"configurable": {"thread_id": "capstone"}}
print(agent.invoke(
{"messages": [{"role": "user", "content": "先记住:我是新人小陈。"}]},
config=cfg,
)["messages"][-1].content)
print(agent.invoke(
{"messages": [{"role": "user", "content": "按笔记:新人要知道哪条规定?我是谁?"}]},
config=cfg,
)["messages"][-1].content)
把 NOTES 和问题改成你的领域(请假、项目约定、学习笔记都可以)。
完成标准(自己打勾)
- 换一个
thread_id后,助手不再记得「小陈」(或你设的名字) - 问资料里没有的事,会承认不知道(或明确说检索为空)
- 有一个
scratch_test.py不需要 API key 就能 assert 通过 - 能用 2 分钟向别人演示,并回答:为什么这里没用 Deep Agents / 没用多代理
之后怎么「精通」
精通不是再读一章。建议:
- 把 FakeEmbeddings 换成真 embedding,用你自己的 20 页材料。
- 给危险工具加 HITL。
- 每周用 L08 的方式加一条回归测试。
- 官方文档变了,以 docs.langchain.com 为准,本仓库脚本作对照。
回到路线图:教程首页
JavaWeb
Spring
MyBatis
linux
消息队列
JavaSE
工具
片段
AI
搜索
dy