{"id":1592,"date":"2024-05-24T21:38:42","date_gmt":"2024-05-24T21:38:42","guid":{"rendered":"https:\/\/www.nicekj.com\/?p=1592"},"modified":"2024-05-24T21:38:55","modified_gmt":"2024-05-24T21:38:55","slug":"shiyong-langchain-congwenbenshujugoujianzhishitupu-2","status":"publish","type":"post","link":"https:\/\/www.nicekj.com\/shiyong-langchain-congwenbenshujugoujianzhishitupu-2.html","title":{"rendered":"\u4f7f\u7528 LangChain \u4ece\u6587\u672c\u6570\u636e\u6784\u5efa\u77e5\u8bc6\u56fe\u8c31"},"content":{"rendered":"<p>\u5728\u8fd9\u7bc7\u6587\u7ae0\u4e2d\uff0c\u6211\u5c06\u5e26\u60a8\u4e86\u89e3\u77e5\u8bc6\u56fe\u8c31\u4ee5\u53ca\u5982\u4f55\u4ece\u60a8\u81ea\u5df1\u7684\u6587\u672c\u6570\u636e\u6784\u5efa\u77e5\u8bc6\u56fe\u8c31\u3002<\/p>\n<h1 data-id=\"heading-0\">\u4ec0\u4e48\u662f\u77e5\u8bc6\u56fe\u8c31\uff1f<\/h1>\n<p>\u77e5\u8bc6\u56fe\u8c31\u4e5f\u79f0\u4e3a\u8bed\u4e49\u56fe\uff0c\u662f\u4e00\u79cd\u4ee5\u6709\u6548\u65b9\u5f0f\u5b58\u50a8\u6570\u636e\u7684\u667a\u80fd\u7ed3\u6784\u3002\u6570\u636e\u4ee5\u8282\u70b9\u548c\u8fb9\u7684\u5f62\u5f0f\u5b58\u50a8\u3002\u5982\u56fe\u6240\u793a\uff0c\u8282\u70b9\u8868\u793a\u5bf9\u8c61\uff0c\u8fb9\u7f18\u8868\u793a\u5b83\u4eec\u4e4b\u95f4\u7684\u5173\u7cfb\u3002\u77e5\u8bc6\u56fe\u8c31\u6240\u8868\u793a\u7684\u6570\u636e\u6a21\u578b\u6709\u65f6\u88ab\u79f0\u4e3a\u8d44\u6e90\u63cf\u8ff0\u6846\u67b6\uff08RDF\uff09\u3002RDF \u5b9a\u4e49\u4e86\u4e07\u7ef4\u7f51\u4e2d\u7ad9\u70b9\u4e92\u8fde\u7684\u65b9\u5f0f\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/5ebbfa0af0ab4e9ff7cbe659a34cead6.png\" alt=\"\u4f7f\u7528 LangChain \u4ece\u6587\u672c\u6570\u636e\u6784\u5efa\u77e5\u8bc6\u56fe\u8c31\" \/><\/figure>\n<a href=\"https:\/\/link.juejin.cn?target=\" title=\"\" ref=\"nofollow noopener noreferrer\" target=\"_blank\" rel=\"noopener\"><\/a><\/p>\n<h1 data-id=\"heading-1\">\u4e3a\u4ec0\u4e48\u9009\u62e9\u77e5\u8bc6\u56fe\u8c31\uff1f<\/h1>\n<p>\u5728\u6574\u4e2a\u6570\u636e\u96c6\u4e2d\uff0c\u53ea\u6709\u5c11\u6570\u6570\u636e\u70b9\u662f\u4ee3\u8868\u6574\u4e2a\u6570\u636e\u96c6\u7684\u56fa\u6709\u6570\u636e\u70b9\u3002\u56e0\u6b64\uff0c\u77e5\u8bc6\u56fe\u8c31\u53ea\u5b58\u50a8\u91cd\u8981\u7684\u6570\u636e\u70b9\u3002\u8fd9\u5927\u5927\u964d\u4f4e\u4e86\u68c0\u7d22\u65f6\u95f4\u7684\u590d\u6742\u5ea6\uff0c\u5e76\u964d\u4f4e\u4e86\u7a7a\u95f4\u7684\u590d\u6742\u6027\u3002<\/p>\n<h1 data-id=\"heading-2\">\u5b9e\u65bd<\/h1>\n<p><strong>1. \u5b89\u88c5\u548c\u5bfc\u5165\u8f6f\u4ef6\u5305<\/strong><\/p>\n<p>\uff08\u6ce8\u610f\uff1a\u6211\u4eec\u5c06\u4f7f\u7528 Open AI \u7684 GPT-3.5 \u6765\u751f\u6210\u5b9e\u4f53\u548c\u5173\u7cfb\uff0c\u8bf7\u786e\u4fdd\u60a8\u5df2\u51c6\u5907\u597d Open AI Api \u5bc6\u94a5\uff09<\/p>\n<p>\u4f7f\u7528\u60a8\u559c\u6b22\u7684\u5305\u7ba1\u7406\u5668\u5b89\u88c5\u5305\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u4f7f\u7528 PIP \u6765\u5b89\u88c5\u548c\u7ba1\u7406\u4f9d\u8d56\u9879\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">pip install -q langchain openai pyvis <span class=\"hljs-attr\">gradio<\/span>==<span class=\"hljs-number\">3.39<\/span>.<span class=\"hljs-number\">0<\/span><\/span>\n<\/code><\/pre>\n<p>\u5bfc\u5165\u5df2\u5b89\u88c5\u7684\u8f6f\u4ef6\u5305\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">javascript<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-javascript code-block-extension-codeShowNum\" lang=\"javascript\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">from<\/span> langchain.<span class=\"hljs-property\">prompts<\/span> <span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-title class_\">PromptTemplate<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-keyword\">from<\/span> langchain.<span class=\"hljs-property\">llms<\/span>.<span class=\"hljs-property\">openai<\/span> <span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-title class_\">OpenAI<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><span class=\"hljs-keyword\">from<\/span> langchain.<span class=\"hljs-property\">chains<\/span> <span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-title class_\">LLMChain<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><span class=\"hljs-keyword\">from<\/span> langchain.<span class=\"hljs-property\">graphs<\/span>.<span class=\"hljs-property\">networkx_graph<\/span> <span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-variable constant_\">KG_TRIPLE_DELIMITER<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\"><span class=\"hljs-keyword\">from<\/span> pprint <span class=\"hljs-keyword\">import<\/span> pprint<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><span class=\"hljs-keyword\">from<\/span> pyvis.<span class=\"hljs-property\">network<\/span> <span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-title class_\">Network<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><span class=\"hljs-keyword\">import<\/span> networkx <span class=\"hljs-keyword\">as<\/span> nx<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\"><span class=\"hljs-keyword\">import<\/span> gradio <span class=\"hljs-keyword\">as<\/span> gr<\/span>\n<\/code><\/pre>\n<p><strong>2. \u8bbe\u7f6e API \u5bc6\u94a5<\/strong><\/p>\n<p>\u4f7f\u7528\u4ece Open AI Platform Dashboard \u590d\u5236\u7684 API \u5bc6\u94a5\u6765\u8bbe\u7f6e API \u5bc6\u94a5\u73af\u5883\u53d8\u91cf\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u901a\u8fc7 colab \u79d8\u5bc6\u4f20\u9012\u53d8\u91cf\u3002\u56e0\u6b64\uff0c\u5728\u8fd0\u884c\u4e4b\u524d\uff0c\u8bf7\u786e\u4fdd\u5df2\u4e3a secret \u53d8\u91cf\u5206\u914d\u4e86 api \u5bc6\u94a5\u503c\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">csharp<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-csharp code-block-extension-codeShowNum\" lang=\"csharp\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">from<\/span> google.colab import userdata<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">OPENAI_API_KEY = userdata.<span class=\"hljs-keyword\">get<\/span>(<span class=\"hljs-string\">'OPENAI_API_KEY'<\/span>)<\/span>\n<\/code><\/pre>\n<p><strong>3. \u5b9a\u4e49\u63d0\u793a<\/strong><\/p>\n<p>\u66f4\u91cd\u8981\u7684\u662f\u5982\u4f55\u5411 LLM \u63d0\u51fa\u6b63\u786e\u7684\u95ee\u9898\uff0c\u4ee5\u4fbf\u4ed6\u4eec\u80fd\u591f\u4ea7\u751f\u6211\u4eec\u9700\u8981\u7684\u4e1c\u897f\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u5728\u8bf4\u660e\u4e2d\u6dfb\u52a0\u4e86\u4e00\u4e9b\u793a\u4f8b\uff0c\u4ee5\u4fbf\u6211\u4eec\u53ef\u4ee5\u66f4\u5bb9\u6613\u7684\u63a8\u7406\u3002\u8fd9\u79cd\u63d0\u793a\u65b9\u5f0f\u79f0\u4e3a Few-Shot \u63d0\u793a\u3002\u8bf7\u968f\u65f6\u9605\u8bfb\u63d0\u793a\uff0c\u4ee5\u6e05\u695a\u5730\u4e86\u89e3\u5176\u5de5\u4f5c\u539f\u7406\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">swift<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-swift code-block-extension-codeShowNum\" lang=\"swift\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"># <span class=\"hljs-type\">Prompt<\/span> template <span class=\"hljs-keyword\">for<\/span> knowledge triple extraction<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">_DEFAULT_KNOWLEDGE_TRIPLE_EXTRACTION_TEMPLATE <span class=\"hljs-operator\">=<\/span> (<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><span class=\"hljs-string\">\"You are a networked intelligence helping a human track knowledge triples\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><span class=\"hljs-string\">\" about all relevant people, things, concepts, etc. and integrating\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\"><span class=\"hljs-string\">\" them with your knowledge stored within your weights\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><span class=\"hljs-string\">\" as well as that stored in a knowledge graph.\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><span class=\"hljs-string\">\" Extract all of the knowledge triples from the text.\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\"><span class=\"hljs-string\">\" A knowledge triple is a clause that contains a subject, a predicate,\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\"><span class=\"hljs-string\">\" and an object. The subject is the entity being described,\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\"><span class=\"hljs-string\">\" the predicate is the property of the subject that is being\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\"><span class=\"hljs-string\">\" described, and the object is the value of the property.<span class=\"hljs-subst\">n<\/span><span class=\"hljs-subst\">n<\/span>\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\"><span class=\"hljs-string\">\"EXAMPLE<span class=\"hljs-subst\">n<\/span>\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\"><span class=\"hljs-string\">\"It's a state in the US. It's also the number 1 producer of gold in the US.<span class=\"hljs-subst\">n<\/span><span class=\"hljs-subst\">n<\/span>\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">f<span class=\"hljs-string\">\"Output: (Nevada, is a, state){KG_TRIPLE_DELIMITER}(Nevada, is in, US)\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">f<span class=\"hljs-string\">\"{KG_TRIPLE_DELIMITER}(Nevada, is the number 1 producer of, gold)<span class=\"hljs-subst\">n<\/span>\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\"><span class=\"hljs-string\">\"END OF EXAMPLE<span class=\"hljs-subst\">n<\/span><span class=\"hljs-subst\">n<\/span>\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\"><span class=\"hljs-string\">\"EXAMPLE<span class=\"hljs-subst\">n<\/span>\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\"><span class=\"hljs-string\">\"I'm going to the store.<span class=\"hljs-subst\">n<\/span><span class=\"hljs-subst\">n<\/span>\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\"><span class=\"hljs-string\">\"Output: NONE<span class=\"hljs-subst\">n<\/span>\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\"><span class=\"hljs-string\">\"END OF EXAMPLE<span class=\"hljs-subst\">n<\/span><span class=\"hljs-subst\">n<\/span>\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\"><span class=\"hljs-string\">\"EXAMPLE<span class=\"hljs-subst\">n<\/span>\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\"><span class=\"hljs-string\">\"Oh huh. I know Descartes likes to drive antique scooters and play the mandolin.<span class=\"hljs-subst\">n<\/span>\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\">f<span class=\"hljs-string\">\"Output: (Descartes, likes to drive, antique scooters){KG_TRIPLE_DELIMITER}(Descartes, plays, mandolin)<span class=\"hljs-subst\">n<\/span>\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\"><span class=\"hljs-string\">\"END OF EXAMPLE<span class=\"hljs-subst\">n<\/span><span class=\"hljs-subst\">n<\/span>\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\"><span class=\"hljs-string\">\"EXAMPLE<span class=\"hljs-subst\">n<\/span>\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\"><span class=\"hljs-string\">\"{text}\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\"><span class=\"hljs-string\">\"Output:\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\">)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\"><span class=\"hljs-type\">KNOWLEDGE_TRIPLE_EXTRACTION_PROMPT<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-type\">PromptTemplate<\/span>(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\">input_variables<span class=\"hljs-operator\">=<\/span>[<span class=\"hljs-string\">\"text\"<\/span>],<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\">template<span class=\"hljs-operator\">=<\/span>_DEFAULT_KNOWLEDGE_TRIPLE_EXTRACTION_TEMPLATE,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\">)<\/span>\n<\/code><\/pre>\n<p><strong>4. \u521d\u59cb\u5316\u94fe<\/strong><\/p>\n<p>\u4f7f\u7528\u63cf\u8ff0\u6027\u63d0\u793a\uff0c\u4f7f\u7528 LLMChain \u7c7b\u521d\u59cb\u5316\u94fe\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-attr\">llm<\/span> = OpenAI(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-attr\">api_key<\/span>=OPENAI_API_KEY,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><span class=\"hljs-attr\">temperature<\/span>=<span class=\"hljs-number\">0.9<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\"><span class=\"hljs-comment\"># Create an LLMChain using the knowledge triple extraction prompt<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><span class=\"hljs-attr\">chain<\/span> = LLMChain(llm=llm, prompt=KNOWLEDGE_TRIPLE_EXTRACTION_PROMPT)<\/span>\n<\/code><\/pre>\n<p>\u8981\u6784\u5efa\u77e5\u8bc6\u56fe\u8c31\uff0c\u60a8\u53ea\u9700\u8981\u4e00\u4e9b\u76f8\u4e92\u5173\u8054\u7684\u6587\u672c\u6570\u636e\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u4ece\u5b57\u7b26\u4e32\u8f93\u5165\u52a0\u8f7d\u6587\u672c\u3002\u4f46\u662f\uff0c\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u60a8\u4e5f\u53ef\u4ee5\u4f7f\u7528 python \u4e2d\u7684\u6570\u636e\u52a0\u8f7d\u5668\uff0c\u4ece\u5176\u4ed6\u7684\u6570\u636e\u683c\u5f0f\uff08\u4f8b\u5982 PDF\u3001JSON\u3001Markdown \u7b49\uff09\u52a0\u8f7d\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">arduino<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-arduino code-block-extension-codeShowNum\" lang=\"arduino\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"># Run the chain with the specified text<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">text = <span class=\"hljs-string\">\"The city of Paris is the capital and most populous city of France. The Eiffel Tower is a famous landmark in Paris.\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">triples = chain.<span class=\"hljs-built_in\">invoke<\/span>(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">{<span class=\"hljs-string\">'text'<\/span> : text}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">).<span class=\"hljs-built_in\">get<\/span>(<span class=\"hljs-string\">'text'<\/span>)<\/span>\n<\/code><\/pre>\n<p>\u5e76\u4f7f\u7528\u6b64\u7528\u6237\u5b9a\u4e49\u7684\u51fd\u6570\u89e3\u6790\u68c0\u7d22\u5230\u7684\u4e09\u5143\u7ec4<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">def parse_triples(response, <span class=\"hljs-attr\">delimiter<\/span>=KG_TRIPLE_DELIMITER):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">if not response:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">return <span class=\"hljs-section\">[]<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">return response.split(delimiter)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><span class=\"hljs-attr\">triples_list<\/span> = parse_triples(triples)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">pprint(triples_list)<\/span>\n<\/code><\/pre>\n<p>\u8f93\u51fa\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">vbnet<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-vbnet code-block-extension-codeShowNum\" lang=\"vbnet\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">[<span class=\"hljs-comment\">' (Paris, is the capital of, France)',<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-comment\">'(Paris, is the most populous city in, France)',<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><span class=\"hljs-comment\">'(Eiffel Tower, is a, famous landmark)',<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><span class=\"hljs-comment\">'(Eiffel Tower, is in, Paris)']<\/span><\/span>\n<\/code><\/pre>\n<p><strong>5. \u53ef\u89c6\u5316\u6784\u5efa\u7684\u77e5\u8bc6\u56fe\u8c31<\/strong><\/p>\n<p>\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u5c06\u4f7f\u7528 PyVis \u4e3a\u6784\u5efa\u7684\u77e5\u8bc6\u56fe\u8c31\u521b\u5efa\u53ef\u89c6\u5316\uff0c\u5e76\u4f7f\u7528 Gradio \u6846\u67b6\u4ee5\u4ea4\u4e92\u65b9\u5f0f\u663e\u793a\u5b83\u3002<\/p>\n<p>\u4ee5\u4e0b\u662f\u4e00\u4e9b\u7528\u6237\u5b9a\u4e49\u7684\u51fd\u6570\uff0c\u53ef\u4ee5\u4f7f\u6211\u4eec\u7684\u4efb\u52a1\u66f4\u8f7b\u677e\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">def create_graph_from_triplets(triplets):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-attr\">G<\/span> = nx.DiGraph()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">for triplet in triplets:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">subject, predicate, <span class=\"hljs-attr\">obj<\/span> = triplet.strip().split(<span class=\"hljs-string\">','<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">G.add_edge(subject.strip(), obj.strip(), <span class=\"hljs-attr\">label<\/span>=predicate.strip())<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">return G<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">def nx_to_pyvis(networkx_graph):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\"><span class=\"hljs-attr\">pyvis_graph<\/span> = Network(notebook=<span class=\"hljs-literal\">True<\/span>, cdn_resources=<span class=\"hljs-string\">'remote'<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">for node in networkx_graph.nodes():<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">pyvis_graph.add_node(node)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">for edge in networkx_graph.edges(<span class=\"hljs-attr\">data<\/span>=<span class=\"hljs-literal\">True<\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">pyvis_graph.add_edge(edge<span class=\"hljs-section\">[0]<\/span>, edge<span class=\"hljs-section\">[1]<\/span>, <span class=\"hljs-attr\">label<\/span>=edge[<span class=\"hljs-number\">2<\/span>][<span class=\"hljs-string\">\"label\"<\/span>])<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">return pyvis_graph<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">def generateGraph():<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\"><span class=\"hljs-attr\">triplets<\/span> = [t.strip() for t in triples_list if t.strip()]<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\"><span class=\"hljs-attr\">graph<\/span> = create_graph_from_triplets(triplets)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\"><span class=\"hljs-attr\">pyvis_network<\/span> = nx_to_pyvis(graph)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\">pyvis_network.toggle_hide_edges_on_drag(True)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\">pyvis_network.toggle_physics(False)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\">pyvis_network.set_edge_smooth('discrete')<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\"><span class=\"hljs-attr\">html<\/span> = pyvis_network.generate_html()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\"><span class=\"hljs-attr\">html<\/span> = html.replace(<span class=\"hljs-string\">\"'\"<\/span>, <span class=\"hljs-string\">\"\"\")<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\">return f\"\"\"&lt;iframe style=<span class=\"hljs-string\">\"width: 100%; height: 600px;margin:0 auto\"<\/span> name=<span class=\"hljs-string\">\"result\"<\/span> allow=<span class=\"hljs-string\">\"midi; geolocation; microphone; camera;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\">display-capture; encrypted-media;\" sandbox=<span class=\"hljs-string\">\"allow-modals allow-forms<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\">allow-scripts allow-same-origin allow-popups<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\">allow-top-navigation-by-user-activation allow-downloads\" allowfullscreen=<span class=\"hljs-string\">\"\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\"><span class=\"hljs-attr\">allowpaymentrequest<\/span>=<span class=\"hljs-string\">\"\"<\/span> frameborder=<span class=\"hljs-string\">\"0\"<\/span> srcdoc=<span class=\"hljs-string\">'{html}'<\/span>&gt;&lt;\/iframe&gt;<span class=\"hljs-string\">\"\"\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\"><\/span>\n<\/code><\/pre>\n<p>\u4f7f\u7528 Gradio \u663e\u793a PyVis \u751f\u6210\u7684 html<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-attr\">demo<\/span> = gr.Interface(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">generateGraph,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><span class=\"hljs-attr\">inputs<\/span>=None,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><span class=\"hljs-attr\">outputs<\/span>=gr.outputs.HTML(),<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\"><span class=\"hljs-attr\">title<\/span>=<span class=\"hljs-string\">\"Knowledge Graph\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><span class=\"hljs-attr\">allow_flagging<\/span>=<span class=\"hljs-string\">'never'<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><span class=\"hljs-attr\">live<\/span>=<span class=\"hljs-literal\">True<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">demo.launch(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\"><span class=\"hljs-attr\">height<\/span>=<span class=\"hljs-number\">800<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\"><span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">\"100%\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">)<\/span>\n<\/code><\/pre>\n<p>\u6700\u7ec8\u8f93\u51fa\uff1a<\/p>\n<p>\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u4f7f\u7528 gradio \u6846\u67b6\u5c55\u793a\u4e86\u6211\u4eec\u7684\u77e5\u8bc6\u56fe\u8c31\uff0c\u4ee5\u4fbf\u53ef\u4ee5\u901a\u8fc7\u751f\u6210\u7684\u94fe\u63a5\u8f7b\u677e\u5730\u4e0e\u4efb\u4f55\u4eba\u5728\u7ebf\u5171\u4eab\u8be5\u9875\u9762\u3002\u53ea\u9700\u5728\u65b9\u6cd5\u4e2d\u6dfb\u52a0 \uff0c\u5373\u53ef\u4f7f\u5e94\u7528\u7a0b\u5e8f\u5bf9\u4efb\u4f55\u4eba\u53ef\u89c1\u3002<code>share=True;demo.launch(share=True)<\/code><\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/723805993e3e63486ac21b6001a21179.png\" alt=\"\u4f7f\u7528 LangChain \u4ece\u6587\u672c\u6570\u636e\u6784\u5efa\u77e5\u8bc6\u56fe\u8c31\" \/><\/figure>\n<a href=\"https:\/\/link.juejin.cn?target=\" title=\"\" ref=\"nofollow noopener noreferrer\" target=\"_blank\" rel=\"noopener\"><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>\u77e5\u8bc6\u56fe\u8c31\u4e5f\u79f0\u4e3a\u8bed\u4e49\u56fe\uff0c\u662f\u4e00\u79cd\u4ee5\u6709\u6548\u65b9\u5f0f\u5b58\u50a8\u6570\u636e\u7684\u667a\u80fd\u7ed3\u6784\u3002\u6570\u636e\u4ee5\u8282\u70b9\u548c\u8fb9\u7684\u5f62\u5f0f\u5b58\u50a8\u3002\u5982\u56fe\u6240\u793a\uff0c\u8282\u70b9\u8868\u793a\u5bf9\u8c61\uff0c\u8fb9\u7f18\u8868\u793a\u5b83\u4eec\u4e4b\u95f4\u7684\u5173\u7cfb\u3002\u77e5\u8bc6\u56fe\u8c31\u6240\u8868\u793a\u7684\u6570\u636e\u6a21\u578b\u6709\u65f6\u88ab\u79f0\u4e3a\u8d44\u6e90\u63cf\u8ff0\u6846\u67b6\uff08RDF\uff09\u3002<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"rank_math_title":"","rank_math_description":"","rank_math_focus_keyword":"","views":"2","footnotes":""},"categories":[3],"tags":[128,129,136,126,127],"collection":[],"class_list":["post-1592","post","type-post","status-publish","format-standard","hentry","category-fenlei2","tag-128","tag-129","tag-136","tag-gpt","tag-ai"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts\/1592","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/comments?post=1592"}],"version-history":[{"count":0,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts\/1592\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/media?parent=1592"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/categories?post=1592"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/tags?post=1592"},{"taxonomy":"collection","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/collection?post=1592"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}