Package: langchain-qianwen
灵积-通义千问 Langchain探索 通义千问 Api 在 langchain 中的使用
参考借鉴 openai langchain 的实现
目前在个人项目工具中使用NOTE: langchian 已经带有了一个合并的Tongyi实现, 当时写这个项目的时候 Tongyi 的功能还不够完善,
不过随着后续的迭代应该已经没问题了 建议优先考虑通过以下方式使用fromlangchain_community.llms.tongyiimportTongyifromlangchain_community.chat_models.tongyiimportChatTongyiInstallpip 会同时安装依赖库: Langchain 和 Dashscope-SDKpipinstalllangchain-qianwenClone 项目 手动安装gitclone...&&cdlangchain_qianwen
pipinstall-rrequirements.txt# 建议运行 pytest 单元测试确认功能运行正常，防止依赖库出现 breaking changepipinstallpytest
pytest使用前置条件：了解 Langchainlangchain文档在阿里云开发参考文档申请并创建API-KEY设置 api_key 环境变量export DASHSCOPE_API_KEY="YOUR_DASHSCOPE_API_KEY"支持 LCEL(LangChain Expression Language) 语法fromlangchain.promptsimportPromptTemplatefromlangchain_qianwenimportQwen_v1if__name__=="__main__":jock_template="给我讲个有关{topic}的笑话"prompt=PromptTemplate.from_template(jock_template)llm=Qwen_v1(model_name="qwen-turbo",temperature=0.18,streaming=True,)chain=prompt|llmforsinchain.stream({"topic":"产品经理"}):print(s,end="",flush=True)支持异步调用 async callback handlerp.s. 目前 llm 模型 (Qwen_v1) 可以使用 AsyncIteratorCallbackHandler,
chatmodel(ChatQwen_v1 待更新 这个我还用不到...)fromlangchain.callbacks.streaming_aiterimportAsyncIteratorCallbackHandlerfromlangchain_qianwenimportQwen_v1fromlangchain.chainsimportConversationChainfromlangchain.memoryimportConversationBufferMemoryimportasyncioasyncdefuse_async_handler(input):handler=AsyncIteratorCallbackHandler()llm=Qwen_v1(model_name="qwen-turbo",streaming=True,callbacks=[handler],)memory=ConversationBufferMemory()chain=ConversationChain(llm=llm,memory=memory,verbose=True,)asyncio.create_task(chain.apredict(input=input))returnhandler.aiter()asyncdefasync_test():async_gen=awaituse_async_handler("hello")asyncforiinasync_gen:print(i)if__name__=="__main__":asyncio.run(async_test())chat_modelsfromlangchain.callbacks.streaming_stdoutimportStreamingStdOutCallbackHandlerfromlangchain_qianwenimportChatQwen_v1fromlangchain.schemaimport(HumanMessage,)if__name__=="__main__":chat=ChatQwen_v1(model_name="qwen-turbo",streaming=True,callbacks=[StreamingStdOutCallbackHandler()],)chat([HumanMessage(content="举例说明一下 PHP 为什么是世界上最好的语言")])使用 agent 增加网络搜索功能fromlangchain.agentsimportload_tools,AgentType,initialize_agentfromlangchain_qianwenimportQwen_v1if__name__=="__main__":llm=Qwen_v1(model_name="qwen-plus",)## 需要去 serpapi 官网申请一个 api_keytool_names=["serpapi"]tools=load_tools(tool_names)agent=initialize_agent(tools=tools,llm=llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True)agent.run("今天北京的天气怎么样?")使用 embedding 提取文档中的信息fromlangchain.embeddings.dashscopeimportDashScopeEmbeddingsfromlangchain.vectorstoresimportChromafromlangchain.text_splitterimportCharacterTextSplitterfromlangchain.chainsimportRetrievalQAfromlangchain.document_loadersimportDirectoryLoaderfromlangchain_qianwenimportQwen_v1if__name__=="__main__":llm=Qwen_v1(model_name="qwen-turbo",)loader=DirectoryLoader("./assets",glob="**/*.txt")document=loader.load()text_splitter=CharacterTextSplitter(chunk_size=2048,chunk_overlap=0)texts=text_splitter.split_documents(document)embeddings=DashScopeEmbeddings(model="text-embedding-v1",)print(f"text length:{len(texts)}")# 使用 embedding engion 将 text 转换为向量db=Chroma.from_documents(texts,embeddings)retriever=db.as_retriever()# qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever, return_source_documents=True)qa=RetrievalQA.from_chain_type(llm=llm,chain_type="stuff",retriever=retriever)query="文章中的工厂模式使用例子有哪些??"rsp=qa.run({"query":query})print(rsp)更多使用请查看 langchain 官方文档 和 examples 目录