langchain使用

安装需要包

bash 复制代码
pip install langchain langchain-deepseek python-dotenv

工作流

bash 复制代码
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_deepseek import ChatDeepSeek
import os

# 配置密钥+模型
os.environ["DEEPSEEK_API_KEY"] = "sk-"
llm = ChatDeepSeek(
    model="deepseek-v4-pro",
    temperature=0.2,
    max_tokens=2048,
    streaming=True  # 流式已开启
)
parser = StrOutputParser()

# ========== 定义4个工作流节点 ==========
prompt_analyse = ChatPromptTemplate.from_messages([
    ("system", "资深后端工程师,精准拆解开发需求,梳理实现思路"),
    ("user", "需求内容:{user_task}")
])
chain_analyse = prompt_analyse | llm | parser

prompt_code = ChatPromptTemplate.from_messages([
    ("system", "根据需求思路编写完整可运行代码,规范整洁"),
    ("user", "需求思路:{analyse_result}")
])
chain_code = prompt_code | llm | parser

prompt_optimize = ChatPromptTemplate.from_messages([
    ("system", "优化代码性能、可读性、异常处理,精简冗余逻辑"),
    ("user", "原始代码:{code_result}")
])
chain_optimize = prompt_optimize | llm | parser

prompt_summary = ChatPromptTemplate.from_messages([
    ("system", "简短总结功能用途、使用方式、注意事项"),
    ("user", "优化后代码:{optimize_result}")
])
chain_summary = prompt_summary | llm | parser

# ========== 流式输出工具函数 ==========
def stream_output(chain, input_data):
    result = ""
    for chunk in chain.stream(input_data):
        print(chunk, end="", flush=True)
        result += chunk
    print("\n")
    return result

# ========== 流式工作流 ==========
def run_workflow(user_task: str):
    print("===== 1.需求解析中 =====\n")
    analyse_res = stream_output(chain_analyse, {"user_task": user_task})

    print("===== 2.生成代码中 =====\n")
    code_res = stream_output(chain_code, {"analyse_result": analyse_res})

    print("===== 3.代码优化中 =====\n")
    optimize_res = stream_output(chain_optimize, {"code_result": code_res})

    print("===== 4.最终总结 =====\n")
    summary_res = stream_output(chain_summary, {"optimize_result": optimize_res})

    return summary_res

# 执行
if __name__ == "__main__":
    task = "用Python写一个文件批量重命名工具"
    run_workflow(task)

搭配mcp操作文件

bash 复制代码
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI  # 用这个,不用 langchain_deepseek
from langchain_core.tools import tool
import os

# ===================== 配置 =====================
os.environ["DEEPSEEK_API_KEY"] = "sk-"

# ✅ 关键:用 ChatOpenAI 调用 DeepSeek,永不报错
llm = ChatOpenAI(
    model="deepseek-v4-pro",
    api_key=os.environ["DEEPSEEK_API_KEY"],
    base_url="https://api.deepseek.com",
    temperature=0.2,
    max_tokens=4096,
    streaming=True
)
parser = StrOutputParser()

# ===================== MCP 工具(无依赖冲突) =====================
@tool
def mcp_create_file(file_path: str, content: str) -> str:
    """MCP 文件创建工具"""
    try:
        with open(file_path, "w", encoding="utf-8") as f:
            f.write(content)
        return f"[MCP] 文件已保存:{file_path}"
    except Exception as e:
        return f"[MCP] 错误:{str(e)}"

# ===================== 工作流 =====================
prompt_analyse = ChatPromptTemplate.from_messages([
    ("system", "资深后端工程师,精准拆解开发需求,梳理实现思路"),
    ("user", "需求内容:{user_task}")
])
chain_analyse = prompt_analyse | llm | parser

prompt_code = ChatPromptTemplate.from_messages([
    ("system", "根据需求思路编写完整可运行代码,规范整洁"),
    ("user", "需求思路:{analyse_result}")
])
chain_code = prompt_code | llm | parser

prompt_optimize = ChatPromptTemplate.from_messages([
    ("system", "优化代码性能、可读性、异常处理"),
    ("user", "原始代码:{code_result}")
])
chain_optimize = prompt_optimize | llm | parser

prompt_summary = ChatPromptTemplate.from_messages([
    ("system", "总结功能,并自动保存代码"),
    ("user", "优化后代码:{optimize_result}")
])
chain_summary = prompt_summary | llm | parser

# ===================== 流式输出 =====================
def stream_output(chain, input_data):
    result = ""
    for chunk in chain.stream(input_data):
        print(chunk, end="", flush=True)
        result += chunk
    print("\n")
    return result

# ===================== 工作流执行 =====================
def run_workflow(user_task: str):
    print("===== 1.需求解析中 =====\n")
    analyse_res = stream_output(chain_analyse, {"user_task": user_task})

    print("===== 2.生成代码中 =====\n")
    code_res = stream_output(chain_code, {"analyse_result": analyse_res})

    print("===== 3.代码优化中 =====\n")
    optimize_res = stream_output(chain_optimize, {"code_result": code_res})

    print("===== 4.最终总结 + 自动保存文件 =====\n")
    summary_res = stream_output(chain_summary, {"optimize_result": optimize_res})

    # 自动保存
    print(mcp_create_file.invoke({"file_path": "output_code.py", "content": optimize_res}))
    return summary_res

if __name__ == "__main__":
    task = "写个漂亮的登录页面,html"
    run_workflow(task)
相关推荐
摇滚侠17 小时前
Maven 入门+高深 单一架构案例 54-59
java·架构·maven·intellij-idea
VidDown17 小时前
Webhook 调试器:让第三方回调“原形毕露”
java·开发语言·javascript·编辑器·postman
折哥的程序人生 · 物流技术专研17 小时前
Java 23 种设计模式:从踩坑到精通 | 原型模式 —— 克隆对象,深拷贝与浅拷贝的坑你踩过吗?
java·设计模式·架构·原型模式·单一职责原则
装不满的克莱因瓶17 小时前
基于 OpenResty 扩展开发实现动态服务注册与发现能力
java·开发语言·架构·openresty
程序员小羊!17 小时前
06Java 异常机制与常用类
java
颜酱17 小时前
LangChain 输出解析器:把模型回复变成你要的数据
python·langchain
2401_8734794017 小时前
企业安全运营中,如何用IP离线库提前发现失陷主机?三步实现风险画像
网络·数据库·python·tcp/ip·ip
weixin_5231853218 小时前
Java基础知识总结(四):引用数据类型与参数传递机制
java·开发语言·python
码农飞哥18 小时前
我把RAG召回率从60%提到90%,就改了这两件事
python·知识库·向量检索·rag·效果提示
宸津-代码粉碎机18 小时前
Spring AI企业级实战|从RAG优化到Agent多工具调度
java·大数据·人工智能·后端·python·spring