LangChain 是什么

资料 第1章. AI通识与基础 - 飞书云文档

人工智能发展

神经网络

类的大脑是由很多神经元细胞 构成,AI神经网络的本质就是在模拟人类大脑神经元

大语言模型

2003年,图灵奖得主约书亚·本吉奥Yoshua Bengio )的一篇名为《A neural probabilistic language model》的论文开创了**神经网络语言模型(Neural Network Language Model,NNLM)**的先河

词向量Word Embedding

  • 每个词语都可以经过模型运算转化为一个多维向量(也就是一个浮点数数组,GPT3采用12288维向量)

  • 通过训练使模型计算出的多维向量文字语义 产生关联,使多维空间中的不同方向表示不同语义

Lanchain

Lanchain : 用于快速构建智能体,可兼容任何模型提供商。

LangGraph: 从底层一步步控制智能题的构建,包括记忆(Memory),人机协调(HITL)等

Deep Agents :用于构建复杂的、处理多步骤任务的智能体。

LangSmith : 用于测试、观察、评估。部署智能体。

Agent: 一种使用大语言模型(LLM) 来决定应用程序控制的流的系统。

能够感知环境、进行推理、自主决策并采取行动以省市县特定的目标智能系统。

特性 传统聊天机器人/LLM AI Agent
交互模式 被动响应,问一句答一句 主动规划,以目标为导向
执行力 停留在文本生成层面 能操作软件、发送邮件、分析数据
自主性 需要人类给出详细步骤 只需给定最终目标,自主寻找路径

Agent的原理

  • Model:负责推理分析、思考,相当于Agent的大脑

  • Tools:负责执行任务,相当于Agent与外界交互的手脚

百炼平台

大模型服务平台百炼控制台

申请 apikey

python 访问本地 ollama 部署的 qwen3:8b

一、先确保 Ollama 已跑 qwen3:8b

ollama run qwen3:8b

看到聊天界面就说明本地模型正常运行。

二、Python 访问本地 Ollama qwen3:8b(完整版代码)

复制代码
import requests

# 本地 Ollama API 地址
OLLAMA_API_URL = "http://localhost:11434/api/chat"


def chat_qwen3(prompt):
    data = {
        "model": "qwen3:8b",
        "messages": [
            {"role": "user", "content": prompt}
        ],
        "stream": False  # 非流式,最简单
    }

    response = requests.post(OLLAMA_API_URL, json=data)
    result = response.json()

    # 输出回答
    print("AI:", result["message"]["content"])


# 测试
if __name__ == "__main__":
    user_input = input("你:")
    chat_qwen3(user_input)

用 openai 风格调用(兼容你之前的 qwen.py

正确的 Ollama OpenAI 兼容地址 :base_url="http://localhost:11434/v1"

为什么带上v1?

  • 错误:http://localhost:11434 → 404
  • 正确:http://localhost:11434/v1 → 成功

Ollama 的 OpenAI 兼容接口必须加 /v1 后缀!

复制代码
from  openai import  OpenAI
# 连接本地Ollama
client=OpenAI(base_url="http://localhost:11434/v1",
              api_key="no-key") # 随便填一个
completion=client.chat.completions.create(
    model="qwen3:8b",
    messages=[{"role":"user","content":"你好,介绍一下自己吧!"}]
    )
print(completion.choices[0].message.content)

流式输出

复制代码
from  openai import  OpenAI
# 连接本地Ollama
client=OpenAI(base_url="http://localhost:11434/v1",
              api_key="no-key") # 随便填一个
completion=client.chat.completions.create(
    model="qwen3:8b",
    messages=[{"role":"user","content":"你好,介绍一下自己吧!"}],
    stream=True # 流式输出
    )
# 安全流式输出
for  chunk in completion:
    #print("chunk:",chunk)
    if chunk.choices:
        delta=chunk.choices[0].delta
        if delta.content:
            print(delta.content,end="",flush=True)

为什么流式输出(stream=True)时,AI 是一个字、一个词往外蹦,而不是一次性整段出来?

因为 大模型本来就是一个字一个字生成的 ,流式输出就是把生成过程实时传给你,所以你看到的就是一个个字 / 词

大模型接口规范

复制代码
curl -X POST https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <DeepSeek API Key>" \
  -d '{
          "model": "deepseek-chat",
          "messages": [
              {
                  "role": "system",
                  "content": "You are a helpful assistant."
              },
              {
                  "role": "user",
                  "content": "Hello!"
              }
          ],
          "stream": false
      }'

- 请求方式:通常是POST,因为要传递JSON风格的参数
- 请求URL:与平台有关
  - DeepSeek官方平台:https://api.deepseek.com/chat/completions
  - 阿里云百炼平台:https://dashscope.aliyuncs.com/compatible-mode/v1
  - 本地ollama部署的模型:http://localhost:11434
- 请求头:开放平台都需要提供API_KEY来校验权限,本地ollama则不需要
  - Content-Type: application/json,请求参数的格式,必须是application/json,稍后解释
  - Authorization: Bearer <DeepSeek API Key>,上一节创建的API_KEY
- 请求参数:JSON格式:

提示词角色

角色 描述 示例
system 优先于user指令之前的指令,也就是给大模型设定角色和任务背景的系统指令 你是一个乐于助人的编程助手,你以小团团的风格来回答用户的问题。
user 终端用户输入的指令(类似于你在ChatGPT聊天框输入的内容) 写一首关于Java编程的诗
assistant 由大模型生成的消息,可能是上一轮对话生成的结果 注意,用户可能与模型产生多轮对话,每轮对话模型都会生成不同结果。

会话记忆问题

大模型的API接口是"无状态"的,服务端不会记录用户请求的上下文。因此我们调用API接口与大模型对话时,每一次对话信息都不会保留,多次对话之间都是独立的,没有关联的。

因此大模型并不知道之前的聊天历史,也就是说大模型是没有记忆的。

要想让大模型有记忆,必须在每次请求时,将之前所有对话的历史拼接好,传递给对话API接口

复制代码
{
    "model": "deepseek-chat",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "12个苹果分给3个人,每人能分几个?直接告诉我答案"},
      {"role": "assistant", "content": "每人可以分到4个苹果。"},
      {"role": "user", "content": "如果是分给4个人呢?"}
    ],
    "stream": false
  }

环境变量读取

复制代码
from   openai import  OpenAI
from  dotenv import  load_dotenv
import  os

# 加载环境变量
load_dotenv()


client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"),base_url="http://localhost:11434/v1")
print("正在调用大模型")
response=client.chat.completions.create( model="qwen3:8b", messages=[
        {"role": "system", "content": "你是一名友好的AI助教。"},
        {"role": "user", "content": "你好,你是谁?"}
    ],
    stream=False)


print(response)
相关推荐
wuxinyan12317 小时前
工业级大模型学习之路025:问题解决-检索质量全为0
人工智能·python·学习·langchain
wuxinyan1231 天前
工业级大模型学习之路023:LangChain零基础入门教程(第六篇):重排序与高级检索策略
人工智能·python·学习·langchain
abigale032 天前
LangChain 实践 极简个人知识库问答机器人&自定义大模型封装+通用对话链
langchain·prompt·rag·lcel
njsgcs2 天前
那langchain的reAct是怎么实现的
人工智能·langchain
swipe2 天前
Elasticsearch 全文检索工程教程:倒排索引、IK 分词器与 BM25 从原理到落地
面试·langchain·llm
SuniaWang2 天前
《Agentx专栏》02-技术选型:预算有限时如何做出正确的技术决策
java·spring·架构·langchain·milvus·agenx·opl
唐璜Taro2 天前
LangChain与LangGraph多Agent实战:从工具链到工作流编排(上)
langchain·agent·langgraph
deephub2 天前
推理 → 行动 → 观察:用 LangChain + Python 实现一个智能体循环
人工智能·python·langchain·大语言模型·agent
嫣然细雨红尘路2 天前
LangChain学习笔记(一)
笔记·学习·langchain