# 为什么要开发这个包?
[](https://pypi.org/project/langchain_zhipu/)
为了方便在 langchain 中使用,langchain_zhipu 直接使用官方 HTTP 接口实现,并避免了如下的现存问题:
- 问题 1: 智谱 AI 的官方 SDK 使用了 pydantic v2,这与 langchain(尤其是 langserve)不兼容
- 问题 2: langchain.community 的国内包更新不及时,无法在 langchain 的 LCEL 语法中使用
# 能力支持
## 已支持全部 langchain 接口
1. invoke
2. ainvoke
3. batch
4. abatch
5. stream
6. astream
7. astream_events
8. asteram_log
## 已支持模型能力
- 已支持生成模型:"glm-3-turbo", "glm-4", "glm-4v"
- 已支持向量模型:"embedding-2"
- 已支持官方知识库管理能力:对知识库、文档、应用做增删改查
- 已支持基于官方知识库的大模型对话
- 支持工具回调:普通工具,以及在线知识库和网络搜索
- 支持智能体
- 支持 RAG
# 使用
## 配置
可以将申请到的 `API_KEY` 配置到环境变量 `ZHIPUAI_API_KEY`。
建议使用 `.env` 文件来管理环境变量,这需要安装 `python_dotenv` 包:
```bash
pip install python_dotenv
```
你的 .env 文件:
```
ZHIPUAI_API_KEY="你的KEY"
```
然后在你的代码目录中:
```python
# 加载 .env 到环境变量
import os
from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv(), override=True)
```
## 安装 langchain_zhipu
```bash
pip install langchain langchain_zhipu
```
其中,langchain 只要 `v0.1.0` ,而 langchain_zhipu 最好安装最新的 4.1.x 版本。
## 代码例子
- [基本用法 usage.ipynb](https://github.com/arcstep/langchain_zhipuai/blob/main/notes/usage.ipynb)
- [智能体 agent.ipynb](https://github.com/arcstep/langchain_zhipuai/blob/main/notes/agent.ipynb)
- [向量模型 embedding.ipynb](https://github.com/arcstep/langchain_zhipuai/blob/main/notes/embedding.ipynb)
- [模型统计 tokens.ipynb](https://github.com/arcstep/langchain_zhipuai/blob/main/notes/tokens.ipynb)
- [知识库 knowledge.ipynb](https://github.com/arcstep/langchain_zhipuai/blob/main/notes/knowledge.ipynb)
- [知识库应用 knowledge_app.ipynb](https://github.com/arcstep/langchain_zhipuai/blob/main/notes/knowledge_app.ipynb)
- [textlong+智谱](https://github.com/arcstep/textlong/blob/main/notes/00%20howto/06%20%E6%99%BA%E8%B0%B1.ipynb)
---
**官方接口指南** 智谱[开放平台](https://open.bigmodel.cn/dev/api)
## 简单的例子
```python
from langchain_zhipu import ChatZhipuAI
llm = ChatZhipuAI()
# invoke
llm.invoke("hi")
# stream
for s in llm.stream("hi"):
print(s)
# astream
async for s in llm.astream("hi"):
print(s)
```
## retrieval 工具
```python
from langchain_zhipu import convert_to_retrieval_tool
llm.bind(tools=[convert_to_retrieval_tool(knowledge_id="1772979648448397312")]).invoke("你知道马冬梅住哪里吗?")
```
## web_search 工具
```python
from langchain_zhipu import convert_to_web_search_tool
llm.bind(tools=[convert_to_web_search_tool(search_query="周星驰电影")]).invoke("哪部电影好看?")
```
## function 工具
```python
from langchain_core.utils.function_calling import convert_to_openai_tool
from langchain.tools import tool
@tool
def search(query: str) -> str:
"""查询 langchan 资料; args: query 类型为字符串,描述用户的问题."""
return "langchain_chinese 是一个为中国大模型优化的langchain模块"
llm.bind(tools=[convert_to_openai_tool(search)]).invoke("langchain_chinese是啥?请查询本地资料回答。")
```
## 使用 glm-4v
```python
from langchain_zhipu import ChatZhipuAI
from langchain_core.prompts import ChatPromptTemplate
llm4v = ChatZhipuAI(model="glm-4v")
prompt = ChatPromptTemplate.from_messages([
("human", [
{
"type": "text",
"text": "图里有什么"
},
{
"type": "image_url",
"image_url": {
"url" : "https://img1.baidu.com/it/u=1369931113,3388870256&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1703696400&t=f3028c7a1dca43a080aeb8239f09cc2f"
}
}
]),
])
(prompt|llm4v).invoke({})
```
Raw data
{
"_id": null,
"home_page": "https://github.com/arcstep/langchain_zhipuai",
"name": "langchain_zhipu",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.9",
"maintainer_email": null,
"keywords": null,
"author": "arcstep",
"author_email": "43801@qq.com",
"download_url": "https://files.pythonhosted.org/packages/9b/3f/2e27b1e7d675ec34461cea2c2309ea52c1122eafc921c0da8742fd6beaab/langchain_zhipu-4.1.8.tar.gz",
"platform": null,
"description": "# \u4e3a\u4ec0\u4e48\u8981\u5f00\u53d1\u8fd9\u4e2a\u5305\uff1f\n\n[](https://pypi.org/project/langchain_zhipu/)\n\n\u4e3a\u4e86\u65b9\u4fbf\u5728 langchain \u4e2d\u4f7f\u7528\uff0clangchain_zhipu \u76f4\u63a5\u4f7f\u7528\u5b98\u65b9 HTTP \u63a5\u53e3\u5b9e\u73b0\uff0c\u5e76\u907f\u514d\u4e86\u5982\u4e0b\u7684\u73b0\u5b58\u95ee\u9898\uff1a\n\n- \u95ee\u9898 1: \u667a\u8c31 AI \u7684\u5b98\u65b9 SDK \u4f7f\u7528\u4e86 pydantic v2\uff0c\u8fd9\u4e0e langchain\uff08\u5c24\u5176\u662f langserve\uff09\u4e0d\u517c\u5bb9\n- \u95ee\u9898 2: langchain.community \u7684\u56fd\u5185\u5305\u66f4\u65b0\u4e0d\u53ca\u65f6\uff0c\u65e0\u6cd5\u5728 langchain \u7684 LCEL \u8bed\u6cd5\u4e2d\u4f7f\u7528\n\n# \u80fd\u529b\u652f\u6301\n\n## \u5df2\u652f\u6301\u5168\u90e8 langchain \u63a5\u53e3\n\n1. invoke\n2. ainvoke\n3. batch\n4. abatch\n5. stream\n6. astream\n7. astream_events\n8. asteram_log\n\n## \u5df2\u652f\u6301\u6a21\u578b\u80fd\u529b\n\n- \u5df2\u652f\u6301\u751f\u6210\u6a21\u578b\uff1a\"glm-3-turbo\", \"glm-4\", \"glm-4v\"\n- \u5df2\u652f\u6301\u5411\u91cf\u6a21\u578b\uff1a\"embedding-2\"\n- \u5df2\u652f\u6301\u5b98\u65b9\u77e5\u8bc6\u5e93\u7ba1\u7406\u80fd\u529b\uff1a\u5bf9\u77e5\u8bc6\u5e93\u3001\u6587\u6863\u3001\u5e94\u7528\u505a\u589e\u5220\u6539\u67e5\n- \u5df2\u652f\u6301\u57fa\u4e8e\u5b98\u65b9\u77e5\u8bc6\u5e93\u7684\u5927\u6a21\u578b\u5bf9\u8bdd\n- \u652f\u6301\u5de5\u5177\u56de\u8c03\uff1a\u666e\u901a\u5de5\u5177\uff0c\u4ee5\u53ca\u5728\u7ebf\u77e5\u8bc6\u5e93\u548c\u7f51\u7edc\u641c\u7d22\n- \u652f\u6301\u667a\u80fd\u4f53\n- \u652f\u6301 RAG\n\n# \u4f7f\u7528\n\n## \u914d\u7f6e\n\n\u53ef\u4ee5\u5c06\u7533\u8bf7\u5230\u7684 `API_KEY` \u914d\u7f6e\u5230\u73af\u5883\u53d8\u91cf `ZHIPUAI_API_KEY`\u3002\n\n\u5efa\u8bae\u4f7f\u7528 `.env` \u6587\u4ef6\u6765\u7ba1\u7406\u73af\u5883\u53d8\u91cf\uff0c\u8fd9\u9700\u8981\u5b89\u88c5 `python_dotenv` \u5305\uff1a\n\n```bash\npip install python_dotenv\n```\n\n\u4f60\u7684 .env \u6587\u4ef6\uff1a\n\n```\nZHIPUAI_API_KEY=\"\u4f60\u7684KEY\"\n```\n\n\u7136\u540e\u5728\u4f60\u7684\u4ee3\u7801\u76ee\u5f55\u4e2d\uff1a\n\n```python\n# \u52a0\u8f7d .env \u5230\u73af\u5883\u53d8\u91cf\nimport os\nfrom dotenv import load_dotenv, find_dotenv\nload_dotenv(find_dotenv(), override=True)\n```\n\n## \u5b89\u88c5 langchain_zhipu\n\n```bash\npip install langchain langchain_zhipu\n```\n\n\u5176\u4e2d\uff0clangchain \u53ea\u8981 `v0.1.0` \uff0c\u800c langchain_zhipu \u6700\u597d\u5b89\u88c5\u6700\u65b0\u7684 4.1.x \u7248\u672c\u3002\n\n## \u4ee3\u7801\u4f8b\u5b50\n\n- [\u57fa\u672c\u7528\u6cd5 usage.ipynb](https://github.com/arcstep/langchain_zhipuai/blob/main/notes/usage.ipynb)\n- [\u667a\u80fd\u4f53 agent.ipynb](https://github.com/arcstep/langchain_zhipuai/blob/main/notes/agent.ipynb)\n- [\u5411\u91cf\u6a21\u578b embedding.ipynb](https://github.com/arcstep/langchain_zhipuai/blob/main/notes/embedding.ipynb)\n- [\u6a21\u578b\u7edf\u8ba1 tokens.ipynb](https://github.com/arcstep/langchain_zhipuai/blob/main/notes/tokens.ipynb)\n- [\u77e5\u8bc6\u5e93 knowledge.ipynb](https://github.com/arcstep/langchain_zhipuai/blob/main/notes/knowledge.ipynb)\n- [\u77e5\u8bc6\u5e93\u5e94\u7528 knowledge_app.ipynb](https://github.com/arcstep/langchain_zhipuai/blob/main/notes/knowledge_app.ipynb)\n- [textlong+\u667a\u8c31](https://github.com/arcstep/textlong/blob/main/notes/00%20howto/06%20%E6%99%BA%E8%B0%B1.ipynb)\n\n---\n\n**\u5b98\u65b9\u63a5\u53e3\u6307\u5357** \u667a\u8c31[\u5f00\u653e\u5e73\u53f0](https://open.bigmodel.cn/dev/api)\n\n## \u7b80\u5355\u7684\u4f8b\u5b50\n\n```python\nfrom langchain_zhipu import ChatZhipuAI\nllm = ChatZhipuAI()\n\n# invoke\nllm.invoke(\"hi\")\n\n# stream\nfor s in llm.stream(\"hi\"):\n print(s)\n\n# astream\nasync for s in llm.astream(\"hi\"):\n print(s)\n```\n\n## retrieval \u5de5\u5177\n\n```python\nfrom langchain_zhipu import convert_to_retrieval_tool\nllm.bind(tools=[convert_to_retrieval_tool(knowledge_id=\"1772979648448397312\")]).invoke(\"\u4f60\u77e5\u9053\u9a6c\u51ac\u6885\u4f4f\u54ea\u91cc\u5417\uff1f\")\n```\n\n## web_search \u5de5\u5177\n\n```python\nfrom langchain_zhipu import convert_to_web_search_tool\nllm.bind(tools=[convert_to_web_search_tool(search_query=\"\u5468\u661f\u9a70\u7535\u5f71\")]).invoke(\"\u54ea\u90e8\u7535\u5f71\u597d\u770b\uff1f\")\n```\n\n## function \u5de5\u5177\n\n```python\nfrom langchain_core.utils.function_calling import convert_to_openai_tool\nfrom langchain.tools import tool\n\n@tool\ndef search(query: str) -> str:\n \"\"\"\u67e5\u8be2 langchan \u8d44\u6599; args: query \u7c7b\u578b\u4e3a\u5b57\u7b26\u4e32\uff0c\u63cf\u8ff0\u7528\u6237\u7684\u95ee\u9898.\"\"\"\n return \"langchain_chinese \u662f\u4e00\u4e2a\u4e3a\u4e2d\u56fd\u5927\u6a21\u578b\u4f18\u5316\u7684langchain\u6a21\u5757\"\n\nllm.bind(tools=[convert_to_openai_tool(search)]).invoke(\"langchain_chinese\u662f\u5565\uff1f\u8bf7\u67e5\u8be2\u672c\u5730\u8d44\u6599\u56de\u7b54\u3002\")\n```\n\n## \u4f7f\u7528 glm-4v\n\n```python\nfrom langchain_zhipu import ChatZhipuAI\nfrom langchain_core.prompts import ChatPromptTemplate\n\nllm4v = ChatZhipuAI(model=\"glm-4v\")\n\nprompt = ChatPromptTemplate.from_messages([\n (\"human\", [\n {\n \"type\": \"text\",\n \"text\": \"\u56fe\u91cc\u6709\u4ec0\u4e48\"\n },\n {\n \"type\": \"image_url\",\n \"image_url\": {\n \"url\" : \"https://img1.baidu.com/it/u=1369931113,3388870256&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1703696400&t=f3028c7a1dca43a080aeb8239f09cc2f\"\n }\n }\n ]),\n])\n\n(prompt|llm4v).invoke({})\n```\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "\u5c06\u667a\u8c31AI\u96c6\u6210\u5230LangChain",
"version": "4.1.8",
"project_urls": {
"Homepage": "https://github.com/arcstep/langchain_zhipuai",
"Repository": "https://github.com/arcstep/langchain_zhipuai.git"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "82ef088fb4967c8a09506072d3cfd3ee1c56b8c01ec21c65f4c3454040488057",
"md5": "36c12470785d6502fc471a31c08669e7",
"sha256": "c1e7aa7d17ad9eb9e21c110998c2b02f57d5d0dfed452ee4501e4dec9e20197a"
},
"downloads": -1,
"filename": "langchain_zhipu-4.1.8-py3-none-any.whl",
"has_sig": false,
"md5_digest": "36c12470785d6502fc471a31c08669e7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.9",
"size": 18938,
"upload_time": "2024-07-16T05:54:46",
"upload_time_iso_8601": "2024-07-16T05:54:46.595273Z",
"url": "https://files.pythonhosted.org/packages/82/ef/088fb4967c8a09506072d3cfd3ee1c56b8c01ec21c65f4c3454040488057/langchain_zhipu-4.1.8-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9b3f2e27b1e7d675ec34461cea2c2309ea52c1122eafc921c0da8742fd6beaab",
"md5": "d4d6bb493804688f4b4b481026ab2fcd",
"sha256": "78bc18cb049a7ec27505a76015e4e7a59abf06c0a3e98a1863802dccfb890cd7"
},
"downloads": -1,
"filename": "langchain_zhipu-4.1.8.tar.gz",
"has_sig": false,
"md5_digest": "d4d6bb493804688f4b4b481026ab2fcd",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.9",
"size": 16164,
"upload_time": "2024-07-16T05:54:48",
"upload_time_iso_8601": "2024-07-16T05:54:48.461639Z",
"url": "https://files.pythonhosted.org/packages/9b/3f/2e27b1e7d675ec34461cea2c2309ea52c1122eafc921c0da8742fd6beaab/langchain_zhipu-4.1.8.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-07-16 05:54:48",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "arcstep",
"github_project": "langchain_zhipuai",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "langchain_zhipu"
}